add 'iterator'(sequences) and 'key_iterator'(maps). The first returns allways the C++ iterator. In sequences __iter__ returns 'iterator()', in maps, __iter__ returns 'key_iterator()'
git-svn-id: https://swig.svn.sourceforge.net/svnroot/swig/trunk/SWIG@7775 626c5289-ae23-0410-ae9c-e8d60b6d4f22
This commit is contained in:
parent
9b9aee8eca
commit
a3424e36e1
3 changed files with 30 additions and 23 deletions
|
|
@ -4,26 +4,30 @@ a1 = li_std_map.A(3)
|
||||||
a2 = li_std_map.A(7)
|
a2 = li_std_map.A(7)
|
||||||
|
|
||||||
|
|
||||||
if 1:
|
p0 = li_std_map.pairii(1,2)
|
||||||
p0 = li_std_map.pairii(1,2)
|
p1 = li_std_map.pairA(1,a1.this)
|
||||||
p1 = li_std_map.pairA(1,a1.this)
|
m = {}
|
||||||
m = {}
|
m[1] = a1
|
||||||
m[1] = a1
|
m[2] = a2
|
||||||
m[2] = a2
|
|
||||||
|
|
||||||
pp1 = li_std_map.p_identa(p1)
|
pp1 = li_std_map.p_identa(p1)
|
||||||
mm = li_std_map.m_identa(m)
|
mm = li_std_map.m_identa(m)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
m = li_std_map.mapA()
|
m = li_std_map.mapA()
|
||||||
m[1] = a1
|
m[1] = a1
|
||||||
m[2] = a2
|
m[2] = a2
|
||||||
for i in m:
|
|
||||||
if m[i[0]].this != i[1].this:
|
|
||||||
print m[i[0]].this, i[1].this
|
pm ={}
|
||||||
raise RuntimeError
|
for k in m:
|
||||||
|
pm[k] = m[k]
|
||||||
|
|
||||||
|
for k in m:
|
||||||
|
if pm[k].this != m[k].this:
|
||||||
|
print pm[k], m[k]
|
||||||
|
raise RuntimeError
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -623,16 +623,15 @@ namespace swig
|
||||||
|
|
||||||
%fragment("PySequence_Cont");
|
%fragment("PySequence_Cont");
|
||||||
|
|
||||||
%newobject output_iterator(PyObject *seq);
|
%newobject iterator(PyObject *PYTHON_SELF);
|
||||||
%extend {
|
%extend {
|
||||||
swig::PySequence_OutputIterator* output_iterator(PyObject *seq) {
|
swig::PySequence_OutputIterator* iterator(PyObject **PYTHON_SELF) {
|
||||||
return swig::make_output_iterator(self->begin(), self->begin(), self->end(), seq);
|
return swig::make_output_iterator(self->begin(), self->begin(), self->end(), *PYTHON_SELF);
|
||||||
}
|
}
|
||||||
|
|
||||||
%pythoncode {
|
%pythoncode {
|
||||||
def __iter__(self):
|
def __iter__(self):
|
||||||
i = self.output_iterator(self)
|
return self.iterator()
|
||||||
return i
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif //SWIG_EXPORT_ITERATOR_METHODS
|
#endif //SWIG_EXPORT_ITERATOR_METHODS
|
||||||
|
|
|
||||||
|
|
@ -140,8 +140,7 @@
|
||||||
return self->find(key) != self->end();
|
return self->find(key) != self->end();
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(SWIG_EXPORT_ITERATOR_METHODS) || defined(SWIG_USE_OLD_MAP_ITERATOR)
|
PyObject* key_iterator() {
|
||||||
PyObject* __iter__() {
|
|
||||||
Map::size_type size = self->size();
|
Map::size_type size = self->size();
|
||||||
int pysize = (size <= (Map::size_type) INT_MAX) ? (int) size : -1;
|
int pysize = (size <= (Map::size_type) INT_MAX) ? (int) size : -1;
|
||||||
if (pysize < 0) {
|
if (pysize < 0) {
|
||||||
|
|
@ -162,6 +161,11 @@
|
||||||
return keyTuple;
|
return keyTuple;
|
||||||
%#endif
|
%#endif
|
||||||
}
|
}
|
||||||
|
#if !defined(SWIG_USE_STD_MAP_ITERATOR)
|
||||||
|
%pythoncode {
|
||||||
|
def __iter__(self):
|
||||||
|
return self.key_iterator()
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
%enddef
|
%enddef
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue