diff options
Diffstat (limited to 'Examples/test-suite/typemap_out_optimal.i')
-rw-r--r-- | Examples/test-suite/typemap_out_optimal.i | 31 |
1 files changed, 16 insertions, 15 deletions
diff --git a/Examples/test-suite/typemap_out_optimal.i b/Examples/test-suite/typemap_out_optimal.i index d707ed2d5..46809d117 100644 --- a/Examples/test-suite/typemap_out_optimal.i +++ b/Examples/test-suite/typemap_out_optimal.i @@ -4,39 +4,40 @@ // Just the following languages tested #if defined (SWIGCSHARP) || defined (SWIGD) %typemap(out, optimal="1") SWIGTYPE %{ - $result = new $1_ltype((const $1_ltype &)$1); + $result = new $1_ltype($1); %} #elif defined (SWIGJAVA) %typemap(out, optimal="1") SWIGTYPE %{ - *($&1_ltype*)&$result = new $1_ltype((const $1_ltype &)$1); + *($&1_ltype*)&$result = new $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)); + %set_output(SWIG_NewPointerObj(new $1_ltype($1), $&descriptor, SWIG_POINTER_OWN | %newpointer_flags)); } #endif %ignore XX::operator=; -#ifdef SWIGD -%rename(trace) XX::debug; -#endif - %inline %{ #include <iostream> using namespace std; struct XX { - XX() { if (debug) cout << "XX()" << endl; } - XX(int i) { if (debug) cout << "XX(" << i << ")" << endl; } - XX(const XX &other) { if (debug) cout << "XX(const XX &)" << endl; } - XX& operator =(const XX &other) { if (debug) cout << "operator=(const XX &)" << endl; return *this; } - ~XX() { if (debug) cout << "~XX()" << endl; } - static XX create() { + XX() { if (trace) cout << "XX()" << endl; } + XX(int i) { if (trace) cout << "XX(" << i << ")" << endl; } + XX(const XX &other) { if (trace) cout << "XX(const XX &)" << endl; } + XX& operator =(const XX &other) { if (trace) cout << "operator=(const XX &)" << endl; return *this; } + ~XX() { if (trace) cout << "~XX()" << endl; } + +// Note: best observed RVO for C#, Java and Python with g++-6 to g++-10 (just one constructor and one destructor call) + static XX create() { return XX(123); } - static bool debug; + static const XX createConst() { + return XX(456); + } + static bool trace; }; -bool XX::debug = true; +bool XX::trace = true; %} |