comparison examples/test.d @ 78:4a04b6759f98

Clean up directory names
author John Reimer <terminal.node@gmail.com>
date Sat, 10 May 2008 13:32:45 -0700
parents
children
comparison
equal deleted inserted replaced
76:04f122e90b0a 78:4a04b6759f98
1 module test;
2
3 import dwt.internal.gtk.c.cairo;
4 import tango.core.Traits;
5 import tango.io.Stdout;
6 import tango.stdc.stdio;
7
8 struct lock {
9 static void lock() { printf("lock\n");}
10 static void unlock() { printf("unlock\n");}
11 }
12
13 const static char[] mm = "Inside outer cairo_version";
14
15 template NameOfFunc(alias f) {
16 // Note: highly dependent on the .stringof formatting
17 // the value begins with "& " which is why the first two chars are cut off
18 const char[] NameOfFunc = (&f).stringof[2 .. $];
19 }
20
21 template ForwardGtkOsCFunc( alias cFunc ) {
22 alias ParameterTupleOf!(cFunc) P;
23 alias ReturnTypeOf!(cFunc) R;
24 mixin("public static R " ~ NameOfFunc!(cFunc) ~ "( P p ){
25 lock.lock();
26 scope(exit) lock.unlock();
27 Stdout (mm).newline;
28 return cFunc(p);
29 }");
30 }
31
32 public class OS {
33 mixin ForwardGtkOsCFunc!(cairo_version);
34 mixin ForwardGtkOsCFunc!(cairo_version_string);
35 }
36
37 void main()
38 {
39 Stdout ("calling cairo_version...").newline;
40 int p = OS.cairo_version();
41 int i = cairo_version();
42 Stdout.formatln("OS.cairo_version() returns: {} cairo_version() returns: {}", p, i ).newline;
43 printf("OS.cairo_version_string returns: %s\n", cairo_version_string() );
44 }