%module li_std_vector %include "std_vector.i" %include "std_string.i" %{ #include #include #include %} namespace std { %template(IntVector) vector; } %template(BoolVector) std::vector; %template(CharVector) std::vector; %template(ShortVector) std::vector; %template(LongVector) std::vector; %template(UCharVector) std::vector; %template(UIntVector) std::vector; %template(UShortVector) std::vector; %template(ULongVector) std::vector; %template(DoubleVector) std::vector; %template(StringVector) std::vector; %inline %{ typedef float Real; size_t typedef_test(std::vector::size_type s) { return s; } %} namespace std { %template(RealVector) vector; } %inline %{ double average(std::vector v) { return std::accumulate(v.begin(),v.end(),0.0)/v.size(); } std::vector half(const std::vector& v) { std::vector w(v); for (std::vector::size_type i=0; i& v) { for (std::vector::iterator it = v.begin(); it != v.end(); ++it) *it /= 2.0; } struct Struct { double num; Struct() : num(0.0) {} Struct(double d) : num(d) {} }; struct Structure { double num; Structure() : num(0.0) {} Structure(double d) : num(d) {} }; const std::vector & vecreal(const std::vector & vec) { return vec; } const std::vector & vecintptr(const std::vector & vec) { return vec; } const std::vector & vecintptr(const std::vector & vec) { return vec; } const std::vector & vecintconstptr(const std::vector & vec) { return vec; } const std::vector & vecstruct(const std::vector & vec) { return vec; } const std::vector & vecstructptr(const std::vector & vec) { return vec; } const std::vector & vecstructconstptr(const std::vector & vec) { return vec; } %} #if !defined(SWIGR) %template(IntPtrVector) std::vector; %template(IntConstPtrVector) std::vector; #endif %template(StructVector) std::vector; %template(StructPtrVector) std::vector; %template(StructConstPtrVector) std::vector; %inline { struct MyClass {}; typedef MyClass *MyClassPtr; typedef std::vector MyClassVector; } %template(MyClassPtrVector) std::vector; %inline { class RetsMetadata { public: MyClassVector GetAllResources(size_t n) const { return MyClassVector(n, 0); } }; } #if defined(SWIGRUBY) %template(LanguageVector) std::vector< swig::LANGUAGE_OBJ >; %inline { std::vector< swig::LANGUAGE_OBJ > LanguageVector; } #endif // Test that the digraph <::aa::Holder> is not generated %include %inline %{ namespace aa { struct Holder { Holder(int n = 0) : number(n) {} int number; }; } %} #if !defined(SWIGOCTAVE) // To fix: something different in Octave is preventing this from working %template(VectorTest) std::vector< ::aa::Holder >; %inline %{ std::vector< ::aa::Holder > vec1(std::vector< ::aa::Holder > x) { return x; } %} #endif // exercising vectors of strings %inline %{ std::vector RevStringVec (const std::vector &In) { std::vector result(In); std::reverse(result.begin(), result.end()); return(result); } %}