diff options
Diffstat (limited to 'Examples/test-suite/template_typedef.i')
| -rw-r--r-- | Examples/test-suite/template_typedef.i | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/Examples/test-suite/template_typedef.i b/Examples/test-suite/template_typedef.i new file mode 100644 index 0000000..b6128e1 --- /dev/null +++ b/Examples/test-suite/template_typedef.i @@ -0,0 +1,179 @@ +#ifdef SWIGPYTHON +%module("templatereduce") template_typedef +#else +%module template_typedef +#endif +// +// Change this to #if 1 to test the 'test' +// +#if 0 + +#define reald double +%{ +#define reald double +%} + +#else + +%inline %{ + typedef double reald; +%} + +#endif + + +%inline %{ + + // typedef double reald; + + namespace vfncs { + + struct UnaryFunctionBase + { + }; + + template <class ArgType, class ResType> + struct UnaryFunction; + + template <class ArgType, class ResType> + struct ArithUnaryFunction; + + template <class ArgType, class ResType> + struct UnaryFunction : UnaryFunctionBase + { + }; + + template <class ArgType, class ResType> + struct ArithUnaryFunction : UnaryFunction<ArgType, ResType> + { + }; + + template <class ArgType, class ResType> + struct unary_func_traits + { + typedef ArithUnaryFunction<ArgType, ResType > base; + }; + + template <class ArgType> + inline + typename unary_func_traits< ArgType, ArgType >::base + make_Identity() + { + return typename unary_func_traits< ArgType, ArgType >::base(); + } + + template <class Arg1, class Arg2> + struct arith_traits + { + }; + + template<> + struct arith_traits< float, float > + { + + typedef float argument_type; + typedef float result_type; + static const char* const arg_type; + static const char* const res_type; + }; + + template<> + struct arith_traits< reald, reald > + { + + typedef reald argument_type; + typedef reald result_type; + static const char* const arg_type; + static const char* const res_type; + }; + + template<> + struct arith_traits< reald, float > + { + typedef float argument_type; + typedef reald result_type; + static const char* const arg_type; + static const char* const res_type; + }; + + template<> + struct arith_traits< float, reald > + { + typedef float argument_type; + typedef reald result_type; + static const char* const arg_type; + static const char* const res_type; + }; + + template <class AF, class RF, class AG, class RG> + inline + ArithUnaryFunction<typename arith_traits< AF, AG >::argument_type, + typename arith_traits< RF, RG >::result_type > + make_Multiplies(const ArithUnaryFunction<AF, RF>& f, + const ArithUnaryFunction<AG, RG >& g) + { + return + ArithUnaryFunction<typename arith_traits< AF, AG >::argument_type, + typename arith_traits< RF, RG >::result_type>(); + } + +#ifndef SWIG + + // Initialize these static class members + + const char* const arith_traits< float, float >::arg_type = "float"; + const char* const arith_traits< float, float >::res_type = "float"; + + const char* const arith_traits< reald, reald >::arg_type = "reald"; + const char* const arith_traits< reald, reald >::res_type = "reald"; + + const char* const arith_traits< reald, float >::arg_type = "float"; + const char* const arith_traits< reald, float >::res_type = "reald"; + + const char* const arith_traits< float, reald >::arg_type = "float"; + const char* const arith_traits< float, reald >::res_type = "reald"; + +#endif + + } +%} + +namespace vfncs { + %template(UnaryFunction_float_float) UnaryFunction<float, float >; + %template(ArithUnaryFunction_float_float) ArithUnaryFunction<float, float >; + %template() unary_func_traits<float, float >; + %template() arith_traits<float, float >; + %template(make_Identity_float) make_Identity<float >; + + %template(UnaryFunction_reald_reald) UnaryFunction<reald, reald >; + %template(ArithUnaryFunction_reald_reald) ArithUnaryFunction<reald, reald >; + + %template() unary_func_traits<reald, reald >; + %template() arith_traits<reald, reald >; + %template(make_Identity_reald) make_Identity<reald >; + + /* [beazley] Added this part */ + %template() unary_func_traits<float,reald>; + %template(UnaryFunction_float_reald) UnaryFunction<float,reald>; + %template(ArithUnaryFunction_float_reald) ArithUnaryFunction<float,reald>; + + /* */ + + %template() arith_traits<reald, float >; + %template() arith_traits<float, reald >; + %template() arith_traits<float, float >; + + %template(make_Multiplies_float_float_reald_reald) + make_Multiplies<float, float, reald, reald>; + + %template(make_Multiplies_float_float_float_float) + make_Multiplies<float, float, float, float>; + + %template(make_Multiplies_reald_reald_reald_reald) + make_Multiplies<reald, reald, reald, reald>; + +} + +#ifdef SWIGPYTHON +swig_type_info *SWIG_TypeQuery(const char* name); +#endif |
