1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192 |
- /*
- Defines the As/From conversors for double/float complex, you need to
- provide complex Type, the Name you want to use in the conversors,
- the complex Constructor method, and the Real and Imag complex
- accesor methods.
- See the std_complex.i and ccomplex.i for concrete examples.
- */
- /* the common from conversor */
- %define %swig_fromcplx_conv(Type, OctConstructor, Real, Imag)
- %fragment(SWIG_From_frag(Type),"header")
- {
- SWIGINTERNINLINE octave_value
- SWIG_From(Type)(const Type& c)
- {
- return octave_value(OctConstructor(Real(c), Imag(c)));
- }
- }
- %enddef
- // the double case
- %define %swig_cplxdbl_conv(Type, Constructor, Real, Imag)
- %fragment(SWIG_AsVal_frag(Type),"header",
- fragment=SWIG_AsVal_frag(double))
- {
- SWIGINTERN int
- SWIG_AsVal(Type) (const octave_value& ov, Type* val)
- {
- if (ov.is_complex_scalar()) {
- if (val) {
- Complex c(ov.complex_value());
- *val=Constructor(c.real(),c.imag());
- }
- return SWIG_OK;
- } else {
- double d;
- int res = SWIG_AddCast(SWIG_AsVal(double)(ov, &d));
- if (SWIG_IsOK(res)) {
- if (val)
- *val = Constructor(d, 0.0);
- return res;
- }
- }
- return SWIG_TypeError;
- }
- }
- %swig_fromcplx_conv(Type, Complex, Real, Imag);
- %enddef
- // the float case
- %define %swig_cplxflt_conv(Type, Constructor, Real, Imag)
- %fragment(SWIG_AsVal_frag(Type),"header",
- fragment=SWIG_AsVal_frag(float)) {
- SWIGINTERN int
- SWIG_AsVal(Type) (const octave_value& ov, Type* val)
- {
- if (ov.is_complex_scalar()) {
- if (val) {
- Complex c(ov.complex_value());
- double re = c.real();
- double im = c.imag();
- if ((-FLT_MAX <= re && re <= FLT_MAX) && (-FLT_MAX <= im && im <= FLT_MAX)) {
- if (val)
- *val = Constructor(%numeric_cast(re, float),
- %numeric_cast(im, float));
- return SWIG_OK;
- } else
- return SWIG_OverflowError;
- }
- } else {
- float d;
- int res = SWIG_AddCast(SWIG_AsVal(float)(ov, &d));
- if (SWIG_IsOK(res)) {
- if (val)
- *val = Constructor(d, 0.0);
- return res;
- }
- }
- return SWIG_TypeError;
- }
- }
- %swig_fromcplx_conv(Type, FloatComplex, Real, Imag);
- %enddef
- #define %swig_cplxflt_convn(Type, Constructor, Real, Imag) \
- %swig_cplxflt_conv(Type, Constructor, Real, Imag)
- #define %swig_cplxdbl_convn(Type, Constructor, Real, Imag) \
- %swig_cplxdbl_conv(Type, Constructor, Real, Imag)
|