Fix C# std::complex pass by value typemaps
This commit is contained in:
parent
e01cfd70c7
commit
a55981b883
7 changed files with 45 additions and 20 deletions
|
|
@ -14,24 +14,24 @@
|
|||
%template(VectorStdCplx) std::vector<std::complex<double> >;
|
||||
#endif
|
||||
|
||||
%inline
|
||||
%inline
|
||||
{
|
||||
std::complex<double> Conj(const std::complex<double>& a)
|
||||
std::complex<double> Conj(std::complex<double> a)
|
||||
{
|
||||
return std::conj(a);
|
||||
}
|
||||
}
|
||||
|
||||
std::complex<float> Conjf(const std::complex<float>& a)
|
||||
std::complex<float> Conjf(std::complex<float> a)
|
||||
{
|
||||
return std::conj(a);
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<std::complex<double> > Copy_h(const std::vector<std::complex<double> >& a)
|
||||
std::vector<std::complex<double> > CopyHalf(std::vector<std::complex<double> > a)
|
||||
{
|
||||
std::vector<std::complex<double> > b(a.size()/2);
|
||||
std::copy(a.begin(), a.begin()+a.size()/2, b.begin());
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
using namespace std;
|
||||
|
||||
|
|
@ -41,14 +41,25 @@
|
|||
complex<double> z2;
|
||||
};
|
||||
|
||||
complex<double> Conj2(const complex<double>& a)
|
||||
const complex<double>& Conj2(const complex<double>& a)
|
||||
{
|
||||
return std::conj(a);
|
||||
static complex<double> ret;
|
||||
ret = std::conj(a);
|
||||
return ret;
|
||||
}
|
||||
|
||||
complex<float> Conjf2(const complex<float>& a)
|
||||
const complex<float>& Conjf2(const complex<float>& a)
|
||||
{
|
||||
return std::conj(a);
|
||||
static complex<float> ret;
|
||||
ret = std::conj(a);
|
||||
return ret;
|
||||
}
|
||||
|
||||
const vector<complex<double> >& CopyHalfRef(const vector<complex<double> >& a)
|
||||
{
|
||||
static vector<complex<double> > b;
|
||||
b = CopyHalf(a);
|
||||
return b;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -59,7 +70,7 @@
|
|||
%{
|
||||
%}
|
||||
|
||||
%inline
|
||||
%inline
|
||||
{
|
||||
complex Conj(complex a)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -28,8 +28,11 @@ public class complextest_runme {
|
|||
vec.Add(new Complex(4, 3));
|
||||
vec.Add(new Complex(1, 0));
|
||||
|
||||
if ( complextest.Copy_h(vec).Count != 2 )
|
||||
throw new Exception("vector<complex> test failed");
|
||||
if ( complextest.CopyHalf(vec).Count != 2 )
|
||||
throw new Exception("CopyHalf test failed");
|
||||
|
||||
if ( complextest.CopyHalfRef(vec).Count != 2 )
|
||||
throw new Exception("CopyHalfRef test failed");
|
||||
|
||||
var p = new ComplexPair();
|
||||
p.z1 = new Complex(0, 1);
|
||||
|
|
|
|||
|
|
@ -27,4 +27,5 @@ v.add([4,3]);
|
|||
v.add(1);
|
||||
|
||||
// TODO: how to check validity?
|
||||
complextest.Copy_h(v);
|
||||
complextest.CopyHalf(v);
|
||||
complextest.CopyHalfRef(v);
|
||||
|
|
|
|||
|
|
@ -26,4 +26,5 @@ endif
|
|||
|
||||
v = (complex(1,2), complex(2,3), complex(4,3), 1);
|
||||
|
||||
complextest.Copy_h(v);
|
||||
complextest.CopyHalf(v);
|
||||
complextest.CopyHalfRef(v);
|
||||
|
|
|
|||
|
|
@ -17,8 +17,11 @@ if complextest.Conjf2(a) != a.conjugate():
|
|||
|
||||
v = (complex(1, 2), complex(2, 3), complex(4, 3), 1)
|
||||
|
||||
if len(complextest.Copy_h(v)) != 2:
|
||||
raise RuntimeError("Copy_h failed")
|
||||
if len(complextest.CopyHalf(v)) != 2:
|
||||
raise RuntimeError("CopyHalf failed")
|
||||
|
||||
if len(complextest.CopyHalfRef(v)) != 2:
|
||||
raise RuntimeError("CopyHalfRef failed")
|
||||
|
||||
p = complextest.ComplexPair()
|
||||
p.z1 = complex(0, 1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue