summaryrefslogtreecommitdiff
path: root/Examples/test-suite/typemap_various.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/typemap_various.i')
-rw-r--r--Examples/test-suite/typemap_various.i57
1 files changed, 57 insertions, 0 deletions
diff --git a/Examples/test-suite/typemap_various.i b/Examples/test-suite/typemap_various.i
new file mode 100644
index 0000000..0b7035e
--- /dev/null
+++ b/Examples/test-suite/typemap_various.i
@@ -0,0 +1,57 @@
+%module typemap_various
+
+// %copyctor need to be disables since 'const SWIGTYPE &' is intended to generate errors
+%nocopyctor;
+
+%typemap(in) SWIGTYPE "_this_will_not_compile_SWIGTYPE_"
+%typemap(in) const SWIGTYPE & "_this_will_not_compile_const_SWIGTYPE_REF_"
+
+%inline %{
+template <class T> struct Foo {
+ Foo() {}
+#ifdef SWIG
+ // These typemaps should be used by foo1 and foo2
+ %typemap(in) Foo<T> "/*in typemap for Foo<T> */"
+ %typemap(in) const Foo & "/*in typemap for const Foo&, with type T*/"
+#endif
+};
+%}
+
+%template(FooInt) Foo<int>;
+%template() Foo<short>; // previously Foo<short> typemaps were being picked up for Python only
+
+%inline %{
+void foo1(Foo<int> f, const Foo<int>& ff) {}
+void foo2(Foo<short> f, const Foo<short>& ff) {}
+%}
+
+#ifdef SWIGUTL
+%typemap(ret) int Bar1::foo() { /* hello1 */ };
+%typemap(ret) int Bar2::foo() { /* hello2 */ };
+%typemap(ret) int foo() {/* hello3 */ };
+#endif
+
+%inline %{
+ struct Bar1 {
+ int foo() { return 1;}
+ };
+
+ struct Bar2 {
+ int foo() { return 1;}
+ };
+%}
+
+
+
+%newobject FFoo::Bar(bool) const ;
+%typemap(newfree) char* Bar(bool) {
+ /* hello */ delete[] result;
+}
+
+%inline {
+ class FFoo {
+ public:
+ char * Bar(bool b) const { return (char *)"x"; }
+ };
+}
+