%module li_std_pair_extra // // activate the automatic comparison methods generation (==,!=,...) // %{ #include <algorithm> // for std::swap %} %include std_pair.i %include std_string.i %include std_complex.i %inline %{ struct A { int val; A(int v = 0): val(v) { } }; struct B { }; %} %std_comp_methods(std::pair<std::string, int>); namespace std { %template(CIntPair) pair<const int, const int>; %template() pair<double, double>; %template(ShortPair) pair<short, short>; %template(IntPair) pair<int, int>; %extend pair<int, int> { %template(pair) pair<short,short>; } %template(SIPair) pair<std::string, int>; %template(CIPair) pair<std::complex<double>, int>; %template(SIIPair) pair<std::pair<std::string, int>, int>; %template(AIntPair) pair<A, int>; %template(CCIntPair) pair<const A, const pair<int, int> >; %template(ABPair) pair<A, B>; %template(IntAPair) pair<int, A>; %template(pairP1) pair<int, A*>; %template(pairP2) pair<A*, int>; %template(pairP3) pair<A*, A*>; %template(pairP4) pair<int, int*>; %template(pairP5) pair<int*, int>; %template(pairP6) pair<int*, int*>; } %std_comp_methods(std::pair<std::pair<std::string, int>, int>); %apply std::pair<int,int> *INOUT {std::pair<int,int> *INOUT2}; %inline %{ /* Test the "out" typemap for pair<T, U> */ std::pair<int, int> makeIntPair(int a, int b) { return std::make_pair(a, b); } /** * There is no "out" typemap for a pointer to a pair, so * this should return a wrapped instance of a std::pair * instead of the native "array" type for the target language. */ std::pair<int, int> * makeIntPairPtr(int a, int b) { static std::pair<int, int> p = std::make_pair(a, b); return &p; } /** * There is no "out" typemap for a non-const reference to a pair, so * this should return a wrapped instance of a std::pair instead of * the native "array" type for the target language. */ std::pair<int, int>& makeIntPairRef(int a, int b) { static std::pair<int, int> p = std::make_pair(a, b); return p; } /** * There is no "out" typemap for a const reference to a pair, so * this should return a wrapped instance of a std::pair * instead of the native "array" type for the target language. */ const std::pair<int, int> & makeIntPairConstRef(int a, int b) { static std::pair<int, int> p = std::make_pair(a, b); return p; } /* Test the "in" typemap for pair<T, U> */ int product1(std::pair<int, int> p) { return p.first*p.second; } /* Test the "in" typemap for const pair<T, U>& */ int product2(const std::pair<int, int>& p) { return p.first*p.second; } std::pair<int, int> p_ident(std::pair<int, int> p, const std::pair<int, int>& q) { return p; } std::pair<int, A*> p_identa(const std::pair<int, A*>& p) { return p; } void d_inout(double *INOUT) { *INOUT += *INOUT; } void d_inout(int *INOUT) { *INOUT += *INOUT; } int d_inout2(double *INOUT) { *INOUT += *INOUT; return 1; } void p_inout(std::pair<int, int> *INOUT) { std::swap(INOUT->first, INOUT->second); } int p_inout2(std::pair<int, int> *INOUT) { std::swap(INOUT->first, INOUT->second); return 1; } void p_inout3(std::pair<int,int> *INOUT, std::pair<int,int> *INOUT2) { std::swap(*INOUT, *INOUT2); } void p_inoutd(std::pair<double, double> *INOUT) { std::swap(INOUT->first, INOUT->second); } std::string s_ident(const std::string& s) { return s; } #if 0 std::pair<char, char> p_ident(std::pair<char, char> p, const std::pair<char, char>& q) { return p; } /* Test the "in" typemap for const pair<T, U>* */ std::pair<A, B> p_ident(std::pair<A, B> p, const std::pair<A, B>& q) { return q; } /* Test the "in" typemap for const pair<T, U>* */ std::pair<int, A> p_ident(std::pair<int, A> p, const std::pair<int, A>& q) { return p; } std::pair<int, int> p_ident(std::pair<int, int> p, const std::pair<A, int>& q) { return p; } std::pair<int, int> p_ident(std::pair<int, int> p, const std::pair<A, B>& q) { return p; } #endif %} namespace std { %template(paircA1) pair<const int, A*>; %template(paircA2) pair<const int, const A*>; %template(pairiiA) pair<int,pair<int, A*> >; }
Generated by dwww version 1.15 on Tue Jul 2 00:44:00 CEST 2024.