Mostly in STL copy constructors. Best to have parameter names as they make their way into the wrappers in some target languages.
60 lines
1.8 KiB
OpenEdge ABL
60 lines
1.8 KiB
OpenEdge ABL
/* -----------------------------------------------------------------------------
|
|
* std_map.i
|
|
*
|
|
* SWIG typemaps for std::map
|
|
* ----------------------------------------------------------------------------- */
|
|
|
|
%include <std_common.i>
|
|
|
|
// ------------------------------------------------------------------------
|
|
// std::map
|
|
// ------------------------------------------------------------------------
|
|
|
|
%{
|
|
#include <map>
|
|
#include <algorithm>
|
|
#include <stdexcept>
|
|
%}
|
|
|
|
// exported class
|
|
|
|
namespace std {
|
|
|
|
template<class K, class T, class C = std::less<K> > class map {
|
|
// add typemaps here
|
|
public:
|
|
typedef size_t size_type;
|
|
typedef ptrdiff_t difference_type;
|
|
typedef K key_type;
|
|
typedef T mapped_type;
|
|
map();
|
|
map(const map< K, T, C >& other);
|
|
|
|
unsigned int size() const;
|
|
bool empty() const;
|
|
void clear();
|
|
%extend {
|
|
const T& get(const K& key) throw (std::out_of_range) {
|
|
std::map< K, T, C >::iterator i = self->find(key);
|
|
if (i != self->end())
|
|
return i->second;
|
|
else
|
|
throw std::out_of_range("key not found");
|
|
}
|
|
void set(const K& key, const T& x) {
|
|
(*self)[key] = x;
|
|
}
|
|
void del(const K& key) throw (std::out_of_range) {
|
|
std::map< K, T, C >::iterator i = self->find(key);
|
|
if (i != self->end())
|
|
self->erase(i);
|
|
else
|
|
throw std::out_of_range("key not found");
|
|
}
|
|
bool has_key(const K& key) {
|
|
std::map< K, T, C >::iterator i = self->find(key);
|
|
return i != self->end();
|
|
}
|
|
}
|
|
};
|
|
}
|