%module li_std_vector %include "std_vector.i" %include "std_string.i" %{ #include <algorithm> #include <functional> #include <numeric> %} namespace std { %template(IntVector) vector<int>; } %template(BoolVector) std::vector<bool>; %template(CharVector) std::vector<char>; %template(ShortVector) std::vector<short>; %template(LongVector) std::vector<long>; %template(UCharVector) std::vector<unsigned char>; %template(UIntVector) std::vector<unsigned int>; %template(UShortVector) std::vector<unsigned short>; %template(ULongVector) std::vector<unsigned long>; %template(DoubleVector) std::vector<double>; %template(StringVector) std::vector<std::string>; %inline %{ typedef float Real; size_t typedef_test(std::vector<int>::size_type s) { return s; } %} namespace std { %template(RealVector) vector<Real>; } %inline %{ double average(std::vector<int> v) { return std::accumulate(v.begin(),v.end(),0.0)/v.size(); } std::vector<Real> half(const std::vector<Real>& v) { std::vector<Real> w(v); for (std::vector<Real>::size_type i=0; i<w.size(); i++) w[i] /= 2.0; return w; } void halve_in_place(std::vector<double>& v) { for (std::vector<double>::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<Real> & vecreal(const std::vector<Real> & vec) { return vec; } const std::vector<int> & vecintptr(const std::vector<int> & vec) { return vec; } const std::vector<int *> & vecintptr(const std::vector<int *> & vec) { return vec; } const std::vector<const int *> & vecintconstptr(const std::vector<const int *> & vec) { return vec; } const std::vector<Struct> & vecstruct(const std::vector<Struct> & vec) { return vec; } const std::vector<Struct *> & vecstructptr(const std::vector<Struct *> & vec) { return vec; } const std::vector<const Struct *> & vecstructconstptr(const std::vector<const Struct *> & vec) { return vec; } %} #if !defined(SWIGR) %template(IntPtrVector) std::vector<int *>; %template(IntConstPtrVector) std::vector<const int *>; #endif %template(StructVector) std::vector<Struct>; %template(StructPtrVector) std::vector<Struct *>; %template(StructConstPtrVector) std::vector<const Struct *>; %inline { struct MyClass {}; typedef MyClass *MyClassPtr; typedef std::vector<MyClassPtr> MyClassVector; } %template(MyClassPtrVector) std::vector<MyClassPtr>; %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 <std_vector.i> %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<std::string> RevStringVec (const std::vector<std::string> &In) { std::vector<std::string> result(In); std::reverse(result.begin(), result.end()); return(result); } %} // regression test for Tcl typecheck bug with empty list fixed in 4.1.0 %inline %{ int sum(const std::vector<int> &v) { return std::accumulate(v.begin(),v.end(),0); } int sum(int v) { return v; } %}
Generated by dwww version 1.15 on Tue Jul 2 00:23:59 CEST 2024.