diff --git a/Examples/test-suite/common.mk b/Examples/test-suite/common.mk index f8a161d14..b0e5e2b15 100644 --- a/Examples/test-suite/common.mk +++ b/Examples/test-suite/common.mk @@ -121,6 +121,7 @@ CPP_TEST_CASES += \ lib_std_string \ lib_std_vector \ lib_typemaps \ + long_long_apply \ member_template \ minherit \ name_cxx \ diff --git a/Examples/test-suite/long_long_apply.i b/Examples/test-suite/long_long_apply.i new file mode 100644 index 000000000..0280994d2 --- /dev/null +++ b/Examples/test-suite/long_long_apply.i @@ -0,0 +1,77 @@ +/* This interface file tests whether SWIG handles the Microsoft __int64 type through the use of +applying the long long typemaps. The generated code should not have any instances of long long. */ + +%module long_long_apply + +%{ +#ifdef _MSC_VER /* Visual C++ */ + typedef __int64 LongLong; + typedef unsigned __int64 UnsignedLongLong; +#else + typedef long long LongLong; + typedef unsigned long long UnsignedLongLong; +#endif +%} + +%apply long long { LongLong }; +%apply unsigned long long { UnsignedLongLong }; + +%apply const long long & { const LongLong & }; +%apply const unsigned long long & { const UnsignedLongLong & }; + +%inline %{ +// pass by value +LongLong value1(LongLong x) { return x; } +UnsignedLongLong value2(UnsignedLongLong x) { return x; } + +// pass by reference +const LongLong &ref1(const LongLong &x) { return x; } +const UnsignedLongLong &ref2(const UnsignedLongLong &x) { return x; } + +// global variables +LongLong global1; +UnsignedLongLong global2; + +// global reference variables +const LongLong& global_ref1 = global1; +const UnsignedLongLong& global_ref2 = global2; +%} + + +// typemaps library +%include "typemaps.i" +%apply long long *INPUT { LongLong *INPUT }; +%apply unsigned long long *INPUT { UnsignedLongLong *INPUT }; + +%apply long long *OUTPUT { LongLong *OUTPUT }; +%apply unsigned long long *OUTPUT { UnsignedLongLong *OUTPUT }; + +%apply long long *INOUT { LongLong *INOUT }; +%apply unsigned long long *INOUT { UnsignedLongLong *INOUT }; + +%apply long long &INPUT { LongLong &INPUT }; +%apply unsigned long long &INPUT { UnsignedLongLong &INPUT }; + +%apply long long &OUTPUT { LongLong &OUTPUT }; +%apply unsigned long long &OUTPUT { UnsignedLongLong &OUTPUT }; + +%apply long long &INOUT { LongLong &INOUT }; +%apply unsigned long long &INOUT { UnsignedLongLong &INOUT }; + +%inline %{ +LongLong in_longlong(LongLong *INPUT) { return *INPUT; } +UnsignedLongLong in_ulonglong(UnsignedLongLong *INPUT) { return *INPUT; } +LongLong inr_longlong(LongLong &INPUT) { return INPUT; } +UnsignedLongLong inr_ulonglong(UnsignedLongLong &INPUT) { return INPUT; } + +void out_longlong(LongLong x, LongLong *OUTPUT) { *OUTPUT = x; } +void out_ulonglong(UnsignedLongLong x, UnsignedLongLong *OUTPUT) { *OUTPUT = x; } +void outr_longlong(LongLong x, LongLong &OUTPUT) { OUTPUT = x; } +void outr_ulonglong(UnsignedLongLong x, UnsignedLongLong &OUTPUT) { OUTPUT = x; } + +void inout_longlong(LongLong *INOUT) { *INOUT = *INOUT; } +void inout_ulonglong(UnsignedLongLong *INOUT) { *INOUT = *INOUT; } +void inoutr_longlong(LongLong &INOUT) { INOUT = INOUT; } +void inoutr_ulonglong(UnsignedLongLong &INOUT) { INOUT = INOUT; } +%} +