File: id.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 (42 lines) | stat: -rw-r--r-- 1,060 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
#include <stdio.h>

// this example illustrates how thisJoinPoint->id() can be used.
// Advice 1 and 2 is called when function Foo::g () is executed.
// In both cases the join point is "execution of Foo::g ()" and
// the resulting join point ID must be the same.
// The call to Foo::g(), which is intercepted by advice 3 is a
// different join point, thus gives a different ID.

aspect IDs {
  advice execution("void Foo::f()") || execution("void Foo::g()") : before () {
    printf ("1-before %s id %d\n", thisJoinPoint->signature (),
	    thisJoinPoint->id ());
  }

  advice execution("void Foo::g()") || execution("void Foo::h()") : before () {
    printf ("2-before %s id %d\n", thisJoinPoint->signature (),
	    thisJoinPoint->id ());
  }
  advice call("void Foo::g()") : before () {
    printf ("3-before %s id %d\n", thisJoinPoint->signature (), 
	    thisJoinPoint->id ());
  }
};

class Foo
 {
   public:
      void f () {}
      void g () {}
      void h () {}
 };

int main ()
 {
   Foo foo;

   foo.f ();
   foo.g ();
   foo.h ();
   return 0;
 }