diff options
| author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2009-08-18 20:56:02 +0000 |
|---|---|---|
| committer | Lorry <lorry@roadtrain.codethink.co.uk> | 2012-09-25 16:59:08 +0000 |
| commit | 9f8a09ed743cedd9547bf0661d518647966ab114 (patch) | |
| tree | 9c7803d3b27a8ec22e91792ac7f7932efa128b20 /Examples/test-suite/li_factory.i | |
| download | swig-tarball-9f8a09ed743cedd9547bf0661d518647966ab114.tar.gz | |
Imported from /srv/lorry/lorry-area/swig-tarball/swig-1.3.40.tar.gz.HEADswig-1.3.40master
Diffstat (limited to 'Examples/test-suite/li_factory.i')
| -rw-r--r-- | Examples/test-suite/li_factory.i | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/Examples/test-suite/li_factory.i b/Examples/test-suite/li_factory.i new file mode 100644 index 0000000..7c59d53 --- /dev/null +++ b/Examples/test-suite/li_factory.i @@ -0,0 +1,49 @@ +%module li_factory +%include factory.i + +%newobject Geometry::create; + +%newobject Geometry::clone; +%factory(Geometry *Geometry::create, Point, Circle); +%factory(Geometry *Geometry::clone, Point, Circle); +#ifdef SWIGPHP +%rename(clone_) clone; +#endif +%factory(Geometry *Point::clone, Point, Circle); +%factory(Geometry *Circle::clone, Point, Circle); + +%inline { + struct Geometry { + enum GeomType{ + POINT, + CIRCLE + }; + + virtual ~Geometry() {} + virtual int draw() = 0; + static Geometry *create(GeomType i); + virtual Geometry *clone() = 0; + }; + + struct Point : Geometry { + int draw() { return 1; } + double width() { return 1.0; } + Geometry *clone() { return new Point(); } + }; + + struct Circle : Geometry { + int draw() { return 2; } + double radius() { return 1.5; } + Geometry *clone() { return new Circle(); } + }; + + Geometry *Geometry::create(GeomType type) { + switch (type) { + case POINT: return new Point(); + case CIRCLE: return new Circle(); + default: return 0; + } + } +} + + |
