summaryrefslogtreecommitdiff
path: root/Examples/test-suite/typemap_out_optimal.i
diff options
context:
space:
mode:
Diffstat (limited to 'Examples/test-suite/typemap_out_optimal.i')
-rw-r--r--Examples/test-suite/typemap_out_optimal.i38
1 files changed, 38 insertions, 0 deletions
diff --git a/Examples/test-suite/typemap_out_optimal.i b/Examples/test-suite/typemap_out_optimal.i
new file mode 100644
index 000000000..8bac2fa89
--- /dev/null
+++ b/Examples/test-suite/typemap_out_optimal.i
@@ -0,0 +1,38 @@
+// Test the optimal attribute in the out typemap
+%module typemap_out_optimal
+
+// Just the following languages tested
+#if defined (SWIGCSHARP)
+%typemap(out, optimal="1") SWIGTYPE %{
+ $result = new $1_ltype((const $1_ltype &)$1);
+%}
+#elif defined (SWIGJAVA)
+%typemap(out, optimal="1") SWIGTYPE %{
+ *($&1_ltype*)&$result = new $1_ltype((const $1_ltype &)$1);
+%}
+#elif defined (SWIGUTL)
+%typemap(out,noblock="1", optimal="1") SWIGTYPE {
+ %set_output(SWIG_NewPointerObj(%new_copy($1, $ltype), $&descriptor, SWIG_POINTER_OWN | %newpointer_flags));
+}
+#endif
+
+%ignore XX::operator=;
+
+%inline %{
+#include <iostream>
+using namespace std;
+
+struct XX {
+ XX() { cout << "XX()" << endl; }
+ XX(int i) { if (debug) cout << "XX(" << i << ")" << endl; }
+ XX(const XX &other) { cout << "XX(const XX &)" << endl; }
+ XX& operator =(const XX &other) { cout << "operator=(const XX &)" << endl; return *this; }
+ ~XX() { if (debug) cout << "~XX()" << endl; }
+ static XX create() {
+ return XX(123);
+ }
+ static bool debug;
+};
+bool XX::debug = true;
+%}
+