summaryrefslogtreecommitdiff
path: root/Examples/test-suite/extend_placement.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/extend_placement.i')
-rw-r--r--Examples/test-suite/extend_placement.i107
1 files changed, 107 insertions, 0 deletions
diff --git a/Examples/test-suite/extend_placement.i b/Examples/test-suite/extend_placement.i
new file mode 100644
index 0000000..b95e821
--- /dev/null
+++ b/Examples/test-suite/extend_placement.i
@@ -0,0 +1,107 @@
+%module extend_placement
+
+// Tests placement of %extend directives
+
+// Before the class
+
+%extend Foo {
+ Foo(int a) { return new Foo(); }
+ ~Foo() { delete $self;}
+ int spam(int x) { return x; }
+ int spam(int x, int y) { return x + y ; }
+ int spam(int x, int y,int z) { return x + y ; }
+ int spam(Foo f, double d = 10.0) { return 0; }
+};
+
+%inline %{
+class Foo {
+public:
+ Foo(){}
+
+#ifdef SWIG
+%extend { Foo(int a, int b) { return new Foo(); } }
+#endif
+
+ int spam() { return 1; }
+ int spam(const char* c) { return 2; }
+};
+%}
+
+// After the class
+
+%inline %{
+class Bar {
+public:
+ Bar() { }
+ int spam() { return 1; }
+ int spam(const char* c) { return 2; }
+};
+%}
+
+
+%extend Bar {
+ Bar(int a) { return new Bar(); }
+ ~Bar() { delete $self;}
+ int spam() { return 1}
+ int spam(int x) { return x; }
+ int spam(int x, int y) { return x + y ; }
+ int spam(int x, int y,int z) { return x + y ; }
+ int spam(Bar b, double d = 10.0) { return 0; }
+};
+
+
+// testing templates
+
+// Before the class
+
+%extend FooT {
+ FooT(int a) { return new FooT<T>(); }
+ ~FooT() { delete $self;}
+ int spam(int x) { return x; }
+ int spam(int x, int y) { return x + y ; }
+ int spam(int x, int y,int z) { return x + y ; }
+ int spam(Foo f, double d = 10.0) { return 0; }
+};
+
+%inline %{
+template<class T>
+class FooT {
+public:
+ FooT(){}
+
+#ifdef SWIG
+%extend { FooT(int a, int b) { return new FooT<T>(); } }
+#endif
+
+ int spam() { return 1; }
+ int spam(const char* c) { return 2; }
+};
+%}
+
+%template(FooTi) FooT<int>;
+
+
+// After the class
+
+%inline %{
+template<class T>
+class BarT {
+public:
+ BarT() { }
+ int spam() { return 1; }
+ int spam(const char* c) { return 2; }
+};
+%}
+
+
+%extend BarT {
+ BarT(int a) { return new BarT<T>(); }
+ ~BarT() { delete $self;}
+ int spam() { return 1}
+ int spam(int x) { return x; }
+ int spam(int x, int y) { return x + y ; }
+ int spam(int x, int y,int z) { return x + y ; }
+ int spam(Bar b, double d = 10.0) { return 0; }
+};
+
+%template(BarTi) BarT<int>;