Notably make them work for primitive types, such as "int". Doing this requires using "object" instead of the actual C# type of the variable to store the current value in the iterator, as we don't currently have a "csnullabletype" typemap that would expand to "T" for nullable types and "T?" for the other ones. This is a bit ugly, but it shouldn't matter much for the generated code and is already done in std::vector<> typemaps. Also add a simple unit test verifying the basic functionality for such vectors. Closes #1568.
57 lines
1.5 KiB
OpenEdge ABL
57 lines
1.5 KiB
OpenEdge ABL
/*
|
|
* a test of set containers.
|
|
* Languages should define swig::LANGUAGE_OBJ to be
|
|
* an entity of their native pointer type which can be
|
|
* included in a STL container.
|
|
*
|
|
* For example:
|
|
* swig::LANGUAGE_OBJ is GC_VALUE in Ruby
|
|
* swig::LANGUAGE_OBJ is SwigPtr_PyObject in python
|
|
*/
|
|
|
|
%module li_std_set
|
|
|
|
%include <std_string.i>
|
|
%include <std_set.i>
|
|
%include <std_vector.i>
|
|
|
|
// Use language macros since Java and C# don't have multiset support (yet)
|
|
// and uses different naming conventions.
|
|
#if defined(SWIGRUBY) || defined(SWIGPYTHON)
|
|
%include <std_multiset.i>
|
|
%template(set_int) std::multiset<int>;
|
|
%template(v_int) std::vector<int>;
|
|
%template(set_string) std::set<std::string>;
|
|
#elif defined(SWIGJAVA) || defined(SWIGCSHARP)
|
|
// This operator is only defined because it's needed to store objects of
|
|
// type Foo in std::set in C++, we don't need to wrap it.
|
|
%ignore operator<;
|
|
%inline %{
|
|
struct Foo
|
|
{
|
|
explicit Foo(int n) : n(n) {}
|
|
|
|
int n;
|
|
|
|
friend bool operator<(Foo foo1, Foo foo2)
|
|
{
|
|
return foo1.n < foo2.n;
|
|
}
|
|
};
|
|
%}
|
|
|
|
// This one doesn't work in Java correctly yet.
|
|
#ifdef SWIGCSHARP
|
|
%template(IntSet) std::set<int>;
|
|
#endif
|
|
%template(StringSet) std::set<std::string>;
|
|
%template(FooSet) std::set<Foo>;
|
|
#endif
|
|
|
|
#if defined(SWIGRUBY)
|
|
%template(LanguageSet) std::set<swig::LANGUAGE_OBJ>;
|
|
#endif
|
|
|
|
#if defined(SWIGPYTHON)
|
|
%template(pyset) std::set<swig::SwigPtr_PyObject>;
|
|
#endif
|