Updated examples to function correctly with new php4 module. Added

some supplemental examples for cpointer, overloading and references using
proxies.


git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7391 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
Kevin Ruland 2005-08-24 16:32:41 +00:00
commit 522ab32693
44 changed files with 506 additions and 131 deletions

View file

@ -1,4 +1,5 @@
#! /bin/sh -e
${SWIG:=swig} -php4 -phpfull -c++ -withcxx example.cxx example.i
phpize && ./configure && make clean && make
${SWIG:=swig} -xmlout e.xml -php4 -make -c++ -withcxx example.cxx example.i
make
php -d extension_dir=. runme.php4

View file

@ -6,6 +6,10 @@
# 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;
@ -14,6 +18,10 @@ void Shape::move(double dx, double dy) {
int Shape::nshapes = 0;
void Circle::set_radius( double r ) {
radius = r;
}
double Circle::area(void) {
return M_PI*radius*radius;
}
@ -29,3 +37,7 @@ double Square::area(void) {
double Square::perimeter(void) {
return 4*width;
}
Circle *CircleFactory( double r ) {
return new Circle(r);
}

View file

@ -15,6 +15,7 @@ public:
virtual double area(void) = 0;
virtual double perimeter(void) = 0;
static int nshapes;
static int get_nshapes();
};
class Circle : public Shape {
@ -23,6 +24,7 @@ private:
public:
Circle(double r) : radius(r) { };
~Circle() { };
void set_radius( double r );
virtual double area(void);
virtual double perimeter(void);
};
@ -37,7 +39,5 @@ public:
virtual double perimeter(void);
};
Circle *CircleFactory( double r );

View file

@ -7,5 +7,6 @@
/* Let's just grab the original header file here */
%newobject CircleFactory;
%include "example.h"

View file

@ -9,8 +9,8 @@ include("example.php");
# ----- Object creation -----
print "Creating some objects:\n";
$c = new Circle(10);
print " Created circle $c\n";
$c = CircleFactory(10);
print " Created circle $c with area ". $c->area() ."\n";
$s = new Square(10);
print " Created square $s\n";
@ -38,21 +38,31 @@ print " Square = (" . $s->x . "," . $s->y . ")\n";
print "\nHere are some properties of the shapes:\n";
foreach (array($c,$s) as $o) {
print " ".get_class($o)." $o\n";
print " x = " . $o->x . "\n";
print " y = " . $o->y . "\n";
print " area = " . $o->area() . "\n";
print " perimeter = " . $o->perimeter() . "\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
# This causes a seq fault, possibly php trying to call destructor twice ?
#$c->_destroy();
#$s->_destroy();
unset($c);
$s = 42;
print Shape::nshapes() . " shapes remain\n";
print "Manually setting nshapes\n";
Shape::nshapes(42);
print Shape::get_nshapes() ." == 42\n";
print "Goodbye\n";
?>