From 2824b0cbb66e715490e1ef13250bd675d87b32d9 Mon Sep 17 00:00:00 2001 From: William S Fulton Date: Wed, 2 Jun 2010 20:53:17 +0000 Subject: rel-2.0.0 git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/tags/rel-2.0.0@12089 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- trunk/Examples/php/overloading/Makefile | 24 ++++++++++++ trunk/Examples/php/overloading/example.cxx | 55 ++++++++++++++++++++++++++++ trunk/Examples/php/overloading/example.h | 46 +++++++++++++++++++++++ trunk/Examples/php/overloading/example.i | 8 ++++ trunk/Examples/php/overloading/runme.php | 59 ++++++++++++++++++++++++++++++ 5 files changed, 192 insertions(+) create mode 100644 trunk/Examples/php/overloading/Makefile create mode 100644 trunk/Examples/php/overloading/example.cxx create mode 100644 trunk/Examples/php/overloading/example.h create mode 100644 trunk/Examples/php/overloading/example.i create mode 100644 trunk/Examples/php/overloading/runme.php (limited to 'trunk/Examples/php/overloading') diff --git a/trunk/Examples/php/overloading/Makefile b/trunk/Examples/php/overloading/Makefile new file mode 100644 index 000000000..1bc0beaab --- /dev/null +++ b/trunk/Examples/php/overloading/Makefile @@ -0,0 +1,24 @@ +TOP = ../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = example.cxx +TARGET = example +INTERFACE = example.i +LIBS = +SWIGOPT = + +all:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='$(TARGET)' INTERFACE='$(INTERFACE)' \ + php_cpp + +static:: + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + SWIGOPT='$(SWIGOPT)' TARGET='myphp' INTERFACE='$(INTERFACE)' \ + php_cpp_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/overloading/example.cxx b/trunk/Examples/php/overloading/example.cxx new file mode 100644 index 000000000..2f684f05c --- /dev/null +++ b/trunk/Examples/php/overloading/example.cxx @@ -0,0 +1,55 @@ +/* File : example.c */ + +#include "example.h" +#include +#ifndef M_PI +# define M_PI 3.14159265358979323846 +#endif + +int Shape::get_nshapes() { + return nshapes; +} + +/* Move the shape to a new location */ +void Shape::move(double dx, double dy) { + x += dx; + y += dy; +} + +int Shape::nshapes = 0; + +double Circle::area(void) { + return M_PI*radius*radius; +} + +double Circle::perimeter(void) { + return 2*M_PI*radius; +} + +double Square::area(void) { + return width*width; +} + +double Square::perimeter(void) { + return 4*width; +} + +const char *overloaded(int i) { + return "Overloaded with int"; +} + +const char *overloaded(double d) { + return "Overloaded with double"; +} + +const char *overloaded(const char * str) { + return "Overloaded with char *"; +} + +const char *overloaded( const Circle& ) { + return "Overloaded with Circle"; +} + +const char *overloaded( const Shape& ) { + return "Overloaded with Shape"; +} diff --git a/trunk/Examples/php/overloading/example.h b/trunk/Examples/php/overloading/example.h new file mode 100644 index 000000000..01d71dd70 --- /dev/null +++ b/trunk/Examples/php/overloading/example.h @@ -0,0 +1,46 @@ +/* File : example.h */ + +#include + +class Shape { +public: + Shape() { + nshapes++; + } + virtual ~Shape() { + nshapes--; + } + double x, y; + void move(double dx, double dy); + virtual double area(void) = 0; + virtual double perimeter(void) = 0; + static int nshapes; + static int get_nshapes(); +}; + +class Circle : public Shape { +private: + double radius; +public: + Circle(double r) : radius(r) { } + ~Circle() { } + virtual double area(void); + virtual double perimeter(void); +}; + +class Square : public Shape { +private: + double width; +public: + Square(double w) : width(w) { } + ~Square() { } + virtual double area(void); + virtual double perimeter(void); +}; + +const char *overloaded( int i ); +const char *overloaded( double d ); +const char *overloaded( const char * str ); +const char *overloaded( const Circle& ); +const char *overloaded( const Shape& ); + diff --git a/trunk/Examples/php/overloading/example.i b/trunk/Examples/php/overloading/example.i new file mode 100644 index 000000000..950d2549d --- /dev/null +++ b/trunk/Examples/php/overloading/example.i @@ -0,0 +1,8 @@ +/* File : example.i */ +%module example + +%{ +#include "example.h" +%} + +%include "example.h" diff --git a/trunk/Examples/php/overloading/runme.php b/trunk/Examples/php/overloading/runme.php new file mode 100644 index 000000000..01044445f --- /dev/null +++ b/trunk/Examples/php/overloading/runme.php @@ -0,0 +1,59 @@ +x = 20; +$c->y = 30; +$s->x = -10; +$s->y = 5; + +print "\nHere is their current position:\n"; +print " Circle = (" . $c->x . "," . $c->y . ")\n"; +print " Square = (" . $s->x . "," . $s->y . ")\n"; + +# ----- Call some methods ----- + +print "\nHere are some properties of the shapes:\n"; +foreach (array(1, 2.1, "quick brown fox", $c, $s) as $o) { + print " ".get_class($o)." \$o\n"; + print " overloaded = " . overloaded($o) . "\n"; + } + +# Need to unset($o) or else we hang on to a reference to the Square object. +unset($o); + +# ----- Delete everything ----- + +print "\nGuess I'll clean up now\n"; + +# Note: this invokes the virtual destructor +unset($c); +$s = 42; + +print Shape::nshapes() . " shapes remain\n"; + +print "Goodbye\n"; + +?> -- cgit v1.2.1