diff --git a/Lib/csharp/std_complex.i b/Lib/csharp/std_complex.i index b5bdec60d..323b97a59 100644 --- a/Lib/csharp/std_complex.i +++ b/Lib/csharp/std_complex.i @@ -4,6 +4,8 @@ namespace std { +%naturalvar complex; + // An extremely simplified subset of std::complex<> which contains just the // methods we need. template @@ -19,28 +21,28 @@ public: } // namespace std %define swig_complex_typemaps(T) -%typemap(cstype) std::complex, std::complex*, const std::complex& "System.Numerics.Complex" +%typemap(cstype) std::complex, const std::complex& "System.Numerics.Complex" // The casts in "pre" are needed in order to allow creating std::complex // from System.Numerics.Complex, which always uses doubles. It relies on the // fact that the name of the C++ and C# float/double types are the same. %typemap(csin, pre=" var cpp$csinput = new Complex_" #T "((" #T ")$csinput.Real, (" #T ")$csinput.Imaginary);" - ) std::complex, std::complex*, const std::complex& "Complex_" #T ".getCPtr(cpp$csinput)" + ) std::complex, const std::complex& "Complex_" #T ".getCPtr(cpp$csinput)" %typemap(csout, excode=SWIGEXCODE) std::complex, const std::complex& { Complex_##T cppret = new Complex_##T($imcall, $owner);$excode return new System.Numerics.Complex(cppret.real(), cppret.imag()); } -%typemap(csvarin, excode=SWIGEXCODE2) std::complex*, const std::complex& %{ +%typemap(csvarin, excode=SWIGEXCODE2) const std::complex& %{ set { var cppvalue = new Complex_##T((T)value.Real, (T)value.Imaginary); $imcall;$excode } %} -%typemap(csvarout, excode=SWIGEXCODE2) std::complex*, const std::complex& %{ +%typemap(csvarout, excode=SWIGEXCODE2) const std::complex& %{ get { var cppret = new Complex_##T($imcall, $owner);$excode return new System.Numerics.Complex(cppret.real(), cppret.imag());