mirror of https://github.com/swig/swig
146 lines
3.2 KiB
OpenEdge ABL
146 lines
3.2 KiB
OpenEdge ABL
%module("templatereduce") li_std_map
|
|
%feature("trackobjects");
|
|
|
|
#ifdef SWIGOCAML
|
|
%warnfilter(SWIGWARN_PARSE_KEYWORD) val;
|
|
#endif
|
|
|
|
%inline %{
|
|
namespace another {
|
|
struct map {
|
|
int val;
|
|
map(int x) : val(x) {}
|
|
};
|
|
}
|
|
%}
|
|
|
|
%include "std_pair.i"
|
|
%include "std_map.i"
|
|
%include "std_string.i"
|
|
|
|
// Declare some maps to play around with
|
|
%template(IntIntMap) std::map<int, int>;
|
|
%template(StringIntMap) std::map<std::string, int>;
|
|
|
|
%ignore Struct::operator<;
|
|
%ignore Struct::operator==;
|
|
|
|
// Add an inline function to test
|
|
%inline %{
|
|
|
|
double valueAverage(std::map<std::string, int> m) {
|
|
if (m.size() == 0) {
|
|
return 0.0;
|
|
}
|
|
|
|
double a = 0.0;
|
|
for (std::map<std::string, int>::iterator i = m.begin(); i != m.end(); i++) {
|
|
a += i->second;
|
|
}
|
|
|
|
return a / m.size();
|
|
}
|
|
|
|
std::string stringifyKeys(std::map<std::string, int> m) {
|
|
std::string a;
|
|
for (std::map<std::string, int>::iterator i = m.begin(); i != m.end(); i++) {
|
|
a += " " + i->first;
|
|
}
|
|
return a;
|
|
}
|
|
|
|
struct Struct {
|
|
double num;
|
|
Struct() : num(0.0) {}
|
|
Struct(double d) : num(d) {}
|
|
bool operator<(const Struct &other) const { return num < other.num; }
|
|
bool operator==(const Struct &other) const { return num == other.num; }
|
|
};
|
|
|
|
%}
|
|
|
|
//#if !defined(SWIGR)
|
|
|
|
// Test out some maps with pointer types
|
|
%template(IntIntPtrMap) std::map<int, int *>;
|
|
%template(IntConstIntPtrMap) std::map<int, const int *>;
|
|
|
|
//#endif
|
|
|
|
|
|
// Test out some maps with non-basic types and non-basic pointer types
|
|
%template(IntStructMap) std::map<int, Struct>;
|
|
%template(IntStructPtrMap) std::map<int, Struct *>;
|
|
%template(IntStructConstPtrMap) std::map<int, const Struct *>;
|
|
%template(StructPtrIntMap) std::map<Struct *, int>;
|
|
|
|
// Test out a non-specialized map
|
|
%template(StructIntMap) std::map<Struct, int>;
|
|
|
|
// Additional map definitions for Ruby, Python and Octave tests
|
|
%inline %{
|
|
struct A{
|
|
int val;
|
|
|
|
A(int v = 0): val(v) {
|
|
}
|
|
};
|
|
%}
|
|
|
|
namespace std {
|
|
%template(pairii) pair<int, int>;
|
|
%template(pairAA) pair<int, A>;
|
|
%template(pairA) pair<int, A*>;
|
|
%template(mapA) map<int, A*>;
|
|
|
|
%template(paircA1) pair<const int, A*>;
|
|
%template(paircA2) pair<const int, const A*>;
|
|
%template(pairiiA) pair<int,pair<int, A*> >;
|
|
%template(pairiiAc) pair<int,const pair<int, A*> >;
|
|
|
|
|
|
#ifdef SWIGRUBY
|
|
%template() pair< swig::LANGUAGE_OBJ, swig::LANGUAGE_OBJ >;
|
|
%template(LanguageMap) map< swig::LANGUAGE_OBJ, swig::LANGUAGE_OBJ >;
|
|
#endif
|
|
|
|
#ifdef SWIGPYTHON
|
|
%template() pair<swig::SwigPtr_PyObject, swig::SwigPtr_PyObject>;
|
|
%template(pymap) map<swig::SwigPtr_PyObject, swig::SwigPtr_PyObject>;
|
|
#endif
|
|
|
|
}
|
|
|
|
%inline {
|
|
std::pair<int, A*> p_identa(std::pair<int, A*> p) {
|
|
return p;
|
|
}
|
|
|
|
std::map<int, A*> m_identa(const std::map<int,A*>& v) {
|
|
return v;
|
|
}
|
|
}
|
|
|
|
%ignore LengthCompare::operator();
|
|
%inline %{
|
|
struct LengthCompare {
|
|
bool operator() (std::string s1, std::string s2) const {
|
|
return s1.size() < s2.size();
|
|
}
|
|
};
|
|
%}
|
|
|
|
// A map sorted by string lengths
|
|
%template(StringLengthNumberMap) std::map< std::string, int, LengthCompare >;
|
|
|
|
%inline %{
|
|
std::map< std::string, int, LengthCompare > MyMap;
|
|
void populate(std::map< std::string, int, LengthCompare >&m) {
|
|
m["aa"] = 2;
|
|
m["xxxx"] = 4;
|
|
m["a"] = 1;
|
|
m["aaaaa"] = 5;
|
|
m["zzz"] = 3;
|
|
}
|
|
%}
|