Add support for non-default compare template argument in std::map wrappers - Javascript

This commit is contained in:
William S Fulton 2018-10-09 22:42:49 +01:00
commit 967776189e
2 changed files with 10 additions and 10 deletions

View file

@ -20,7 +20,7 @@
namespace std { namespace std {
template<class K, class T> class map { template<class K, class T, class C = std::less<K> > class map {
// add typemaps here // add typemaps here
public: public:
typedef size_t size_type; typedef size_t size_type;
@ -28,14 +28,14 @@ namespace std {
typedef K key_type; typedef K key_type;
typedef T mapped_type; typedef T mapped_type;
map(); map();
map(const map<K,T> &); map(const map< K, T, C > &);
unsigned int size() const; unsigned int size() const;
bool empty() const; bool empty() const;
void clear(); void clear();
%extend { %extend {
const T& get(const K& key) throw (std::out_of_range) { const T& get(const K& key) throw (std::out_of_range) {
std::map<K,T >::iterator i = self->find(key); std::map< K, T, C >::iterator i = self->find(key);
if (i != self->end()) if (i != self->end())
return i->second; return i->second;
else else
@ -45,14 +45,14 @@ namespace std {
(*self)[key] = x; (*self)[key] = x;
} }
void del(const K& key) throw (std::out_of_range) { void del(const K& key) throw (std::out_of_range) {
std::map<K,T >::iterator i = self->find(key); std::map< K, T, C >::iterator i = self->find(key);
if (i != self->end()) if (i != self->end())
self->erase(i); self->erase(i);
else else
throw std::out_of_range("key not found"); throw std::out_of_range("key not found");
} }
bool has_key(const K& key) { bool has_key(const K& key) {
std::map<K,T >::iterator i = self->find(key); std::map< K, T, C >::iterator i = self->find(key);
return i != self->end(); return i != self->end();
} }
} }

View file

@ -20,7 +20,7 @@
namespace std { namespace std {
template<class K, class T> class map { template<class K, class T, class C = std::less<K> > class map {
// add typemaps here // add typemaps here
public: public:
typedef size_t size_type; typedef size_t size_type;
@ -28,14 +28,14 @@ namespace std {
typedef K key_type; typedef K key_type;
typedef T mapped_type; typedef T mapped_type;
map(); map();
map(const map<K,T> &); map(const map< K, T, C > &);
unsigned int size() const; unsigned int size() const;
bool empty() const; bool empty() const;
void clear(); void clear();
%extend { %extend {
const T& get(const K& key) throw (std::out_of_range) { const T& get(const K& key) throw (std::out_of_range) {
std::map<K,T >::iterator i = self->find(key); std::map< K, T, C >::iterator i = self->find(key);
if (i != self->end()) if (i != self->end())
return i->second; return i->second;
else else
@ -45,14 +45,14 @@ namespace std {
(*self)[key] = x; (*self)[key] = x;
} }
void del(const K& key) throw (std::out_of_range) { void del(const K& key) throw (std::out_of_range) {
std::map<K,T >::iterator i = self->find(key); std::map< K, T, C >::iterator i = self->find(key);
if (i != self->end()) if (i != self->end())
self->erase(i); self->erase(i);
else else
throw std::out_of_range("key not found"); throw std::out_of_range("key not found");
} }
bool has_key(const K& key) { bool has_key(const K& key) {
std::map<K,T >::iterator i = self->find(key); std::map< K, T, C >::iterator i = self->find(key);
return i != self->end(); return i != self->end();
} }
} }