From 68521b1c74c8cebe48cfea3234fa0db208995083 Mon Sep 17 00:00:00 2001 From: Marcelo Matus Date: Sun, 8 Jan 2006 09:30:53 +0000 Subject: [PATCH] add value iterator git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@8295 626c5289-ae23-0410-ae9c-e8d60b6d4f22 --- Lib/python/std_map.i | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/Lib/python/std_map.i b/Lib/python/std_map.i index f9a58d593..23725cf7e 100644 --- a/Lib/python/std_map.i +++ b/Lib/python/std_map.i @@ -175,12 +175,44 @@ return iter; %#else return keyTuple; +%#endif + } + PyObject* value_iterator() { + Map::size_type size = self->size(); + int pysize = (size <= (Map::size_type) INT_MAX) ? (int) size : -1; + if (pysize < 0) { + SWIG_PYTHON_THREAD_BEGIN_BLOCK; + PyErr_SetString(PyExc_OverflowError, + "map size not valid in python"); + SWIG_PYTHON_THREAD_END_BLOCK; + return NULL; + } + PyObject* keyTuple = PyTuple_New(pysize); + Map::const_iterator i = self->begin(); + for (int j = 0; j < pysize; ++i, ++j) { + PyTuple_SET_ITEM(keyTuple, j, swig::from(i->second)); + } +%#if PY_VERSION_HEX >= 0x02020000 + PyObject* iter = PyObject_GetIter(keyTuple); + Py_DECREF(keyTuple); + return iter; +%#else + return keyTuple; %#endif } #if !defined(SWIG_USE_STD_MAP_ITERATOR) %pythoncode { def __iter__(self): return self.key_iterator() + + def iterkeys(self): + return self.key_iterator() + + def itervalues(self): + return self.value_iterator() + + def iteritems(self): + return self.iterator() } #endif }