Use %naturalvar for C# std::complex wrappers

This commit is contained in:
William S Fulton 2017-05-19 06:58:54 +01:00
commit bb758d7810

View file

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