File: main.cc

package info (click to toggle)
aspectc%2B%2B 1.0pre4~svn.20080711-1
  • links: PTS, VCS
  • area: main
  • in suites: lenny
  • size: 104,504 kB
  • ctags: 363,975
  • sloc: cpp: 1,645,814; ansic: 16,601; sh: 2,175; makefile: 1,043
file content (80 lines) | stat: -rw-r--r-- 1,806 bytes parent folder | download | duplicates (11)
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#include <stdio.h>

struct X {
    X () {}
};

struct C1 {
    void x () {
	printf ("  void C1::x()\n");
    }
    void f () {
	printf ("  void C1::f()\n");
    }
    void f (double) {
	printf ("  void C1::f(double)\n");
    }
    void f (const X&) {
	printf ("  void C1::f(X&)\n");
    }
};

struct C2 : C1 {
    void x () {
	printf ("  void C2::x()\n");
    }
    void f () {
	printf ("  void C2::f()\n");
    }
    void f (double) {
	printf ("  void C2::f(double)\n");
    }
    void f (const X&) {
	printf ("  void C2::f(X&)\n");
    }
};

struct C3 : C2 {
    void x () {
	printf ("  void C3::x()\n");
    }
    void f () {
	printf ("  void C3::f()\n");
    }
    void f (double) {
	printf ("  void C3::f(double)\n");
    }
    void f (const X&) {
	printf ("  void C3::f(X&)\n");
    }
};

aspect Tracer {
    advice execution (derived ("C2")) : before () {
	printf ("  before derived(\"C2\")\n");
    }
    advice execution (derived ("% C2::f(double)")) : before () {
	printf ("  before derived(\"%% C2::f(double)\")\n");
    }
    advice execution (derived ("% C2::f(X&)")) : before () {
	printf ("  before derived(\"%% C2::f(X&)\")\n");
    }
};

int main() {
    C3 c;
    printf ("Derived: test the 'derived' pointcut function:\n");
    printf ("==============================================\n");
    c.C1::f (3.0);
    printf ("----------------------------------------------\n");
    c.C1::f ();
    printf ("----------------------------------------------\n");
    c.C2::f (3.0);
    printf ("----------------------------------------------\n");
    c.C3::f ();
    printf ("----------------------------------------------\n");
    c.C3::f (X ());
    printf ("----------------------------------------------\n");
    c.C3::x ();
    printf ("==============================================\n");
}