Mercurial > projects > dwt-linux
view test.d @ 64:42e997034df9
Label
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Sat, 12 Jan 2008 15:16:49 +0100 |
parents | 758bbbe4b86a |
children |
line wrap: on
line source
module test; private import dwt.internal.gtk.c.cairo; private import tango.core.Traits; private import tango.io.Stdout; private import tango.stdc.stdio; struct lock { static void lock() { printf("lock\n");} static void unlock() { printf("unlock\n");} } const static char[] mm = "Inside outer cairo_version"; template NameOfFunc(alias f) { // Note: highly dependent on the .stringof formatting // the value begins with "& " which is why the first two chars are cut off const char[] NameOfFunc = (&f).stringof[2 .. $]; } template ForwardGtkOsCFunc( alias cFunc ) { alias ParameterTupleOf!(cFunc) P; alias ReturnTypeOf!(cFunc) R; mixin("public static R " ~ NameOfFunc!(cFunc) ~ "( P p ){ lock.lock(); scope(exit) lock.unlock(); Stdout (mm).newline; return cFunc(p); }"); } public class OS { mixin ForwardGtkOsCFunc!(cairo_version); mixin ForwardGtkOsCFunc!(cairo_version_string); } void main() { Stdout ("calling cairo_version...").newline; int p = OS.cairo_version(); int i = cairo_version(); Stdout.formatln("OS.cairo_version() returns: {} cairo_version() returns: {}", p, i ).newline; printf("OS.cairo_version_string returns: %s\n", cairo_version_string() ); }