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/octave/funcptr2 | |
| 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/octave/funcptr2')
| -rw-r--r-- | Examples/octave/funcptr2/Makefile | 19 | ||||
| -rw-r--r-- | Examples/octave/funcptr2/example.c | 19 | ||||
| -rw-r--r-- | Examples/octave/funcptr2/example.h | 9 | ||||
| -rw-r--r-- | Examples/octave/funcptr2/example.i | 18 | ||||
| -rw-r--r-- | Examples/octave/funcptr2/runme.m | 24 |
5 files changed, 89 insertions, 0 deletions
diff --git a/Examples/octave/funcptr2/Makefile b/Examples/octave/funcptr2/Makefile new file mode 100644 index 0000000..627b0a9 --- /dev/null +++ b/Examples/octave/funcptr2/Makefile @@ -0,0 +1,19 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i + +all:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' octave + +static:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='myoctave' INTERFACE='$(INTERFACE)' octave_static + +clean:: + $(MAKE) -f $(TOP)/Makefile octave_clean + rm -f $(TARGET).py + +check: all diff --git a/Examples/octave/funcptr2/example.c b/Examples/octave/funcptr2/example.c new file mode 100644 index 0000000..5c4a3da --- /dev/null +++ b/Examples/octave/funcptr2/example.c @@ -0,0 +1,19 @@ +/* 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; +} + +int (*funcvar)(int,int) = add; diff --git a/Examples/octave/funcptr2/example.h b/Examples/octave/funcptr2/example.h new file mode 100644 index 0000000..9936e24 --- /dev/null +++ b/Examples/octave/funcptr2/example.h @@ -0,0 +1,9 @@ +/* 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); + +extern int (*funcvar)(int,int); + diff --git a/Examples/octave/funcptr2/example.i b/Examples/octave/funcptr2/example.i new file mode 100644 index 0000000..681775a --- /dev/null +++ b/Examples/octave/funcptr2/example.i @@ -0,0 +1,18 @@ +/* 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 */ +%callback("%(upper)s"); +int add(int, int); +int sub(int, int); +int mul(int, int); +%nocallback; + +extern int (*funcvar)(int,int); + diff --git a/Examples/octave/funcptr2/runme.m b/Examples/octave/funcptr2/runme.m new file mode 100644 index 0000000..1d3d8f7 --- /dev/null +++ b/Examples/octave/funcptr2/runme.m @@ -0,0 +1,24 @@ +# file: runme.m + +example + +a = 37 +b = 42 + +# Now call our C function with a bunch of callbacks + +printf("Trying some C callback functions\n"); +printf(" a = %i\n", a); +printf(" b = %i\n", b); +printf(" ADD(a,b) = %i\n", example.do_op(a,b,example.ADD)); +printf(" SUB(a,b) = %i\n", example.do_op(a,b,example.SUB)); +printf(" MUL(a,b) = %i\n", example.do_op(a,b,example.MUL)); + +printf("Here is what the C callback function objects look like in Octave\n"); +example.ADD +example.SUB +example.MUL + +printf("Call the functions directly...\n"); +printf(" add(a,b) = %i\n", example.add(a,b)); +printf(" sub(a,b) = %i\n", example.sub(a,b)); |
