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/php/pointer | |
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/php/pointer')
-rw-r--r-- | trunk/Examples/php/pointer/Makefile | 24 | ||||
-rw-r--r-- | trunk/Examples/php/pointer/example.c | 16 | ||||
-rw-r--r-- | trunk/Examples/php/pointer/example.i | 24 | ||||
-rw-r--r-- | trunk/Examples/php/pointer/runme.php | 35 |
4 files changed, 99 insertions, 0 deletions
diff --git a/trunk/Examples/php/pointer/Makefile b/trunk/Examples/php/pointer/Makefile new file mode 100644 index 000000000..0862ce5ec --- /dev/null +++ b/trunk/Examples/php/pointer/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/trunk/Examples/php/pointer/example.c b/trunk/Examples/php/pointer/example.c new file mode 100644 index 000000000..3326dec3e --- /dev/null +++ b/trunk/Examples/php/pointer/example.c @@ -0,0 +1,16 @@ +/* File : example.c */ + +void add(double *x, double *y, double *result) { + *result = *x + *y; +} + +void sub(int *x, int *y, int *result) { + *result = *x - *y; +} + +int divide(int n, int d, int *r) { + int q; + q = n/d; + *r = n - q*d; + return q; +} diff --git a/trunk/Examples/php/pointer/example.i b/trunk/Examples/php/pointer/example.i new file mode 100644 index 000000000..c14b94189 --- /dev/null +++ b/trunk/Examples/php/pointer/example.i @@ -0,0 +1,24 @@ +/* File : example.i */ +%module example + +/* This example illustrates a couple of different techniques + for manipulating C pointers */ + +%include phppointers.i +/* First we'll use the pointer library */ +extern void add(double *REF, double *REF, double *REF); + +/* Next we'll use some typemaps */ + +%include typemaps.i +extern void sub(int *INPUT, int *INPUT, int *OUTPUT); + +/* Next we'll use typemaps and the %apply directive */ + +//%apply int *OUTPUT { int *r }; +//extern int divide(int n, int d, int *r); + + + + + diff --git a/trunk/Examples/php/pointer/runme.php b/trunk/Examples/php/pointer/runme.php new file mode 100644 index 000000000..5e86de6a2 --- /dev/null +++ b/trunk/Examples/php/pointer/runme.php @@ -0,0 +1,35 @@ +<?php + + require "example.php"; + + # First create some objects using the pointer library. + + print "Testing the pointer library\n"; + + $a = 37.145; + $b = 42.555; + $c = ""; // $c must be defined and not null. + + print " a = $a\n"; + print " b = $b\n"; + print " c = $c\n"; + + # Call the add() function wuth some pointers + add(&$a,&$b,&$c); + + print " $a + $b = $c\n"; + + # Now try the typemap library + # This should be much easier. Now how it is no longer + # necessary to manufacture pointers. + + print "Trying the typemap library\n"; + $r = sub(37,42); + print " 37 - 42 = $r\n"; + + # Now try the version with multiple return values + # print "Testing multiple return values\n"; + # ($q,$r) = divide(42,37); + # print " 42/37 = $q remainder $r\n"; + +?> |