File: main.cc

package info (click to toggle)
aspectc%2B%2B 1.0pre4~svn.20090918-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 117,308 kB
  • ctags: 410,601
  • sloc: cpp: 1,883,007; ansic: 17,279; sh: 2,190; makefile: 1,088
file content (64 lines) | stat: -rw-r--r-- 1,318 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <stdio.h>

// --------------------------- Aspect code -----------------------------

aspect FigureObserver
 {
   pointcut move () =
     execution ("void FigureElement::setXY(int,int)") ||
     execution ("void Point::set%(int)") ||
     execution ("void Line::setP%(Point &)");
public:

   advice move () : after () {
     printf ("moved\n");
   }
 };

// ------------------------------- normal C++ ---------------------------- 
class FigureElement
 {
   public:
      virtual void setXY (int, int) = 0;
 };

class Point : public FigureElement
 {
      int _x;
      int _y;
   public:
      Point (int x, int y) : _x (x), _y (y) {}
      void setXY (int x, int y) { _x = x; _y = y; }
      void setX (int x) { _x = x; }
      void setY (int y) { _y = y; }
      int x () { return _x; }
      int y () { return _y; }
 };

class Line : public FigureElement
 {
      Point p1;
      Point p2;
   public:
      void setXY (int x, int y);
      void setP1 (const Point &p) { p1 = p; }
      void setP2 (const Point &p) { p2 = p; }
 };

void Line::setXY (int x, int y)
 {
   int dx = p2.x () - p1.x ();
   int dy = p2.y () - p1.y ();

   setP1 ((const Point&)Point (x, y));
   setP2 ((const Point&)Point (x + dx, y + dy));
 }

int main ()
 {
   Point p (0, 0);

   p.setXY (3, 2);
   p.setX (10);
   return 0;
 }