diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
---|---|---|
committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/php/funcptr | |
download | swig-tarball-master.tar.gz |
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Examples/php/funcptr')
-rw-r--r-- | Examples/php/funcptr/Makefile | 24 | ||||
-rw-r--r-- | Examples/php/funcptr/example.c | 17 | ||||
-rw-r--r-- | Examples/php/funcptr/example.h | 7 | ||||
-rw-r--r-- | Examples/php/funcptr/example.i | 15 | ||||
-rw-r--r-- | Examples/php/funcptr/runme.php | 24 |
5 files changed, 87 insertions, 0 deletions
diff --git a/Examples/php/funcptr/Makefile b/Examples/php/funcptr/Makefile new file mode 100644 index 0000000..0862ce5 --- /dev/null +++ b/Examples/php/funcptr/Makefile @@ -0,0 +1,24 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i +LIBS = +SWIGOPT = + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \ + php + +static:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' \ + php_static + +clean:: + $(MAKE) -f $(TOP)/Makefile php_clean + rm -f $(TARGET).php + +check: all + $(MAKE) -f $(TOP)/Makefile php_run diff --git a/Examples/php/funcptr/example.c b/Examples/php/funcptr/example.c new file mode 100644 index 0000000..99583b7 --- /dev/null +++ b/Examples/php/funcptr/example.c @@ -0,0 +1,17 @@ +/* File : example.c */ + +int do_op(int a, int b, int (*op)(int,int)) { + return (*op)(a,b); +} + +int add(int a, int b) { + return a+b; +} + +int sub(int a, int b) { + return a-b; +} + +int mul(int a, int b) { + return a*b; +} diff --git a/Examples/php/funcptr/example.h b/Examples/php/funcptr/example.h new file mode 100644 index 0000000..58989db --- /dev/null +++ b/Examples/php/funcptr/example.h @@ -0,0 +1,7 @@ +/* file: example.h */ + +extern int do_op(int,int, int (*op)(int,int)); +extern int add(int,int); +extern int sub(int,int); +extern int mul(int,int); + diff --git a/Examples/php/funcptr/example.i b/Examples/php/funcptr/example.i new file mode 100644 index 0000000..39390da --- /dev/null +++ b/Examples/php/funcptr/example.i @@ -0,0 +1,15 @@ +/* File : example.i */ +%module example +%{ +#include "example.h" +%} + +/* Wrap a function taking a pointer to a function */ +extern int do_op(int a, int b, int (*op)(int, int)); + +/* Now install a bunch of "ops" as constants */ +%constant int (*ADD)(int,int) = add; +%constant int (*SUB)(int,int) = sub; +%constant int (*MUL)(int,int) = mul; + + diff --git a/Examples/php/funcptr/runme.php b/Examples/php/funcptr/runme.php new file mode 100644 index 0000000..712d414 --- /dev/null +++ b/Examples/php/funcptr/runme.php @@ -0,0 +1,24 @@ +<?php + +require "example.php"; + +$a = 37; +$b = 42; + +# Now call our C function with a bunch of callbacks + +print "Trying some C callback functions\n"; +print " a = $a\n"; +print " b = $b\n"; +print " ADD(a,b) = ". do_op($a,$b,ADD)."\n"; +print " SUB(a,b) = ". do_op($a,$b,SUB)."\n"; +print " MUL(a,b) = ". do_op($a,$b,MUL)."\n"; + +print "Here is what the C callback function objects look like in php\n"; +print "Using swig style string pointers as we need them registered as constants\n"; +print " ADD = " . ADD . "\n"; +print " SUB = " . SUB . "\n"; +print " MUL = " . MUL . "\n"; + +?> + |