diff options
author | William S Fulton <wsf@fultondesigns.co.uk> | 2018-09-23 08:55:01 +0100 |
---|---|---|
committer | William S Fulton <wsf@fultondesigns.co.uk> | 2018-09-23 19:10:00 +0100 |
commit | 72ccea50809c4c4f9943e6597027359c65e0df24 (patch) | |
tree | 08fec4acdda6d0f70fcabdb50d7682fb1aa8cf9e /Lib/python | |
parent | 603285ecb6064e5192fa5b69c37ea3adfbba0434 (diff) | |
download | swig-72ccea50809c4c4f9943e6597027359c65e0df24.tar.gz |
Python std::unordered_map std::unordered_multimap improvements
- Fixes for -builtin
- Fix missing iterator support
Diffstat (limited to 'Lib/python')
-rw-r--r-- | Lib/python/std_unordered_map.i | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/Lib/python/std_unordered_map.i b/Lib/python/std_unordered_map.i index f89a36a12..79882b292 100644 --- a/Lib/python/std_unordered_map.i +++ b/Lib/python/std_unordered_map.i @@ -139,7 +139,39 @@ %swig_container_methods(Map) #if defined(SWIGPYTHON_BUILTIN) + %feature("python:slot", "mp_length", functype="lenfunc") __len__; + %feature("python:slot", "mp_subscript", functype="binaryfunc") __getitem__; + %feature("python:slot", "tp_iter", functype="getiterfunc") key_iterator; %feature("python:slot", "sq_contains", functype="objobjproc") __contains__; + + %extend { + %newobject iterkeys(PyObject **PYTHON_SELF); + swig::SwigPyIterator* iterkeys(PyObject **PYTHON_SELF) { + return swig::make_output_key_forward_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } + + %newobject itervalues(PyObject **PYTHON_SELF); + swig::SwigPyIterator* itervalues(PyObject **PYTHON_SELF) { + return swig::make_output_value_forward_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } + + %newobject iteritems(PyObject **PYTHON_SELF); + swig::SwigPyIterator* iteritems(PyObject **PYTHON_SELF) { + return swig::make_output_forward_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); + } + } + +#else + %extend { + %pythoncode %{def __iter__(self): + return self.key_iterator()%} + %pythoncode %{def iterkeys(self): + return self.key_iterator()%} + %pythoncode %{def itervalues(self): + return self.value_iterator()%} + %pythoncode %{def iteritems(self): + return self.iterator()%} + } #endif %extend { @@ -231,16 +263,8 @@ swig::SwigPyIterator* value_iterator(PyObject **PYTHON_SELF) { return swig::make_output_value_forward_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF); } - - %pythoncode %{def __iter__(self): - return self.key_iterator()%} - %pythoncode %{def iterkeys(self): - return self.key_iterator()%} - %pythoncode %{def itervalues(self): - return self.value_iterator()%} - %pythoncode %{def iteritems(self): - return self.iterator()%} } + %enddef %define %swig_unordered_map_methods(Map...) |