diff options
Diffstat (limited to 'trunk/Examples/php/value')
-rw-r--r-- | trunk/Examples/php/value/Makefile | 24 | ||||
-rw-r--r-- | trunk/Examples/php/value/example.c | 13 | ||||
-rw-r--r-- | trunk/Examples/php/value/example.h | 8 | ||||
-rw-r--r-- | trunk/Examples/php/value/example.i | 17 | ||||
-rw-r--r-- | trunk/Examples/php/value/runme.php | 43 |
5 files changed, 105 insertions, 0 deletions
diff --git a/trunk/Examples/php/value/Makefile b/trunk/Examples/php/value/Makefile new file mode 100644 index 000000000..9e69d00a4 --- /dev/null +++ b/trunk/Examples/php/value/Makefile @@ -0,0 +1,24 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +SRCS = example.c +TARGET = example +INTERFACE = example.i +LIBS = +SWIGOPT = -noproxy + +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/value/example.c b/trunk/Examples/php/value/example.c new file mode 100644 index 000000000..3c402a214 --- /dev/null +++ b/trunk/Examples/php/value/example.c @@ -0,0 +1,13 @@ +/* File : example.c */ + +#include "example.h" + +double dot_product(Vector a, Vector b) { + return (a.x*b.x + a.y*b.y + a.z*b.z); +} + +void vector_add(Vector a, Vector b, Vector* result) { + result->x = a.x + b.x; + result->y = a.y + b.y; + result->z = a.z + b.z; +} diff --git a/trunk/Examples/php/value/example.h b/trunk/Examples/php/value/example.h new file mode 100644 index 000000000..f55752a5f --- /dev/null +++ b/trunk/Examples/php/value/example.h @@ -0,0 +1,8 @@ +/* File : example.h */ + +typedef struct { + double x, y, z; +} Vector; + +double dot_product(Vector a, Vector b); +void vector_add(Vector a, Vector b, Vector* result); diff --git a/trunk/Examples/php/value/example.i b/trunk/Examples/php/value/example.i new file mode 100644 index 000000000..386fa3b84 --- /dev/null +++ b/trunk/Examples/php/value/example.i @@ -0,0 +1,17 @@ +// Tests SWIG's handling of pass-by-value for complex datatypes +%module example + +%{ +#include "example.h" +%} + +%include "example.h" + +/* Some helper functions for our interface */ +%inline %{ + +void vector_print(Vector *v) { + printf("Vector %p = (%g, %g, %g)\n", v, v->x, v->y, v->z); +} +%} + diff --git a/trunk/Examples/php/value/runme.php b/trunk/Examples/php/value/runme.php new file mode 100644 index 000000000..49115376c --- /dev/null +++ b/trunk/Examples/php/value/runme.php @@ -0,0 +1,43 @@ +<?php + + require "example.php"; + + + $v = new_vector(); + vector_x_set($v,1.0); + vector_y_set($v,2.0); + vector_z_set($v,3.0); + + $w = new_vector(); + vector_x_set($w,10.0); + vector_y_set($w,11.0); + vector_z_set($w,12.0); + + echo "I just created the following vector\n"; + vector_print($v); + vector_print($w); + + echo "\nNow I'm going to compute the dot product\n"; + + $d = dot_product($v, $w); + + echo "dot product = $d (should be 68)\n"; + + echo "\nNow I'm going to add the vectors together\n"; + + $r = new_vector(); + vector_add($v, $w, $r); + + vector_print($r); + + echo "The value should be (11,13,15)\n"; + + echo "\nNow I'm going to clean up the return result\n"; + +# free($r); + + echo "Good\n"; + +?> + + |