diff options
| author | William S Fulton <wsf@fultondesigns.co.uk> | 2010-06-02 20:53:17 +0000 |
|---|---|---|
| committer | William S Fulton <wsf@fultondesigns.co.uk> | 2010-06-02 20:53:17 +0000 |
| commit | 2824b0cbb66e715490e1ef13250bd675d87b32d9 (patch) | |
| tree | c3bc8d54c6d73f2b7ce08cac34172dbc9f5e5b95 /trunk/Examples/ruby/funcptr2 | |
| parent | 289cfef4b4766ff266f3b1bdda8ca3a952e5a047 (diff) | |
| download | swig-2.0.0.tar.gz | |
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/tags/rel-2.0.0@12089 626c5289-ae23-0410-ae9c-e8d60b6d4f22
Diffstat (limited to 'trunk/Examples/ruby/funcptr2')
| -rw-r--r-- | trunk/Examples/ruby/funcptr2/Makefile | 18 | ||||
| -rw-r--r-- | trunk/Examples/ruby/funcptr2/example.c | 19 | ||||
| -rw-r--r-- | trunk/Examples/ruby/funcptr2/example.h | 9 | ||||
| -rw-r--r-- | trunk/Examples/ruby/funcptr2/example.i | 18 | ||||
| -rw-r--r-- | trunk/Examples/ruby/funcptr2/runme.rb | 22 |
5 files changed, 86 insertions, 0 deletions
diff --git a/trunk/Examples/ruby/funcptr2/Makefile b/trunk/Examples/ruby/funcptr2/Makefile new file mode 100644 index 000000000..8c4fe1064 --- /dev/null +++ b/trunk/Examples/ruby/funcptr2/Makefile @@ -0,0 +1,18 @@ +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)' ruby + +static:: + $(MAKE) -f $(TOP)/Makefile SRCS='$(SRCS)' SWIG='$(SWIG)' \ + TARGET='myruby' INTERFACE='$(INTERFACE)' ruby_static + +clean:: + $(MAKE) -f $(TOP)/Makefile ruby_clean + +check: all diff --git a/trunk/Examples/ruby/funcptr2/example.c b/trunk/Examples/ruby/funcptr2/example.c new file mode 100644 index 000000000..5c4a3dabf --- /dev/null +++ b/trunk/Examples/ruby/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/trunk/Examples/ruby/funcptr2/example.h b/trunk/Examples/ruby/funcptr2/example.h new file mode 100644 index 000000000..9936e24fc --- /dev/null +++ b/trunk/Examples/ruby/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/trunk/Examples/ruby/funcptr2/example.i b/trunk/Examples/ruby/funcptr2/example.i new file mode 100644 index 000000000..681775a3e --- /dev/null +++ b/trunk/Examples/ruby/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/trunk/Examples/ruby/funcptr2/runme.rb b/trunk/Examples/ruby/funcptr2/runme.rb new file mode 100644 index 000000000..99b984260 --- /dev/null +++ b/trunk/Examples/ruby/funcptr2/runme.rb @@ -0,0 +1,22 @@ +require 'example' + +a = 37 +b = 42 + +# Now call our C function with a bunch of callbacks + +puts "Trying some C callback functions" +puts " a = #{a}" +puts " b = #{b}" +puts " ADD(a,b) = #{Example.do_op(a,b,Example::ADD)}" +puts " SUB(a,b) = #{Example.do_op(a,b,Example::SUB)}" +puts " MUL(a,b) = #{Example.do_op(a,b,Example::MUL)}" + +puts "Here is what the C callback function objects look like in Ruby" +puts " ADD = #{Example::ADD}" +puts " SUB = #{Example::SUB}" +puts " MUL = #{Example::MUL}" + +puts "Call the functions directly..." +puts " add(a,b) = #{Example.add(a,b)}" +puts " sub(a,b) = #{Example.sub(a,b)}" |
