summaryrefslogtreecommitdiff
path: root/trunk/Examples/php/value
diff options
context:
space:
mode:
Diffstat (limited to 'trunk/Examples/php/value')
-rw-r--r--trunk/Examples/php/value/Makefile24
-rw-r--r--trunk/Examples/php/value/example.c13
-rw-r--r--trunk/Examples/php/value/example.h8
-rw-r--r--trunk/Examples/php/value/example.i17
-rw-r--r--trunk/Examples/php/value/runme.php43
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";
+
+?>
+
+