From 9c6d5dc53c2fa90718753daa2aeeecf0ea769da0 Mon Sep 17 00:00:00 2001 From: Takashi Tamura Date: Mon, 30 Jan 2017 16:37:33 +0900 Subject: [PATCH] [python] make SwigPyIteratorClosed_T and SwigPyIteratorOpen_T inherit from forward iterator classes. --- Lib/python/pyiterators.swg | 62 ++++++-------------------------------- 1 file changed, 9 insertions(+), 53 deletions(-) diff --git a/Lib/python/pyiterators.swg b/Lib/python/pyiterators.swg index 5bc47a228..cb15e35cd 100644 --- a/Lib/python/pyiterators.swg +++ b/Lib/python/pyiterators.swg @@ -234,7 +234,7 @@ namespace swig { template::value_type, typename FromOper = from_oper > - class SwigPyIteratorOpen_T : public SwigPyIterator_T + class SwigPyIteratorOpen_T : public SwigPyForwardIteratorOpen_T { public: FromOper from; @@ -244,26 +244,9 @@ namespace swig { typedef SwigPyIteratorOpen_T self_type; SwigPyIteratorOpen_T(out_iterator curr, PyObject *seq) - : SwigPyIterator_T(curr, seq) + : SwigPyForwardIteratorOpen_T(curr, seq) { } - - PyObject *value() const { - return from(static_cast(*(base::current))); - } - - SwigPyIterator *copy() const - { - return new self_type(*this); - } - - SwigPyIterator *incr(size_t n = 1) - { - while (n--) { - ++base::current; - } - return this; - } SwigPyIterator *decr(size_t n = 1) { @@ -273,6 +256,7 @@ namespace swig { return this; } }; + template::value_type, typename FromOper = from_oper > @@ -315,7 +299,7 @@ namespace swig { return this; } - private: + protected: out_iterator begin; out_iterator end; }; @@ -323,49 +307,25 @@ namespace swig { template::value_type, typename FromOper = from_oper > - class SwigPyIteratorClosed_T : public SwigPyIterator_T + class SwigPyIteratorClosed_T : public SwigPyForwardIteratorClosed_T { public: FromOper from; typedef OutIterator out_iterator; typedef ValueType value_type; - typedef SwigPyIterator_T base; + typedef SwigPyIterator_T base; + typedef SwigPyForwardIteratorClosed_T base0; typedef SwigPyIteratorClosed_T self_type; SwigPyIteratorClosed_T(out_iterator curr, out_iterator first, out_iterator last, PyObject *seq) - : SwigPyIterator_T(curr, seq), begin(first), end(last) + : SwigPyForwardIteratorClosed_T(curr, first, last, seq) { } - - PyObject *value() const { - if (base::current == end) { - throw stop_iteration(); - } else { - return from(static_cast(*(base::current))); - } - } - - SwigPyIterator *copy() const - { - return new self_type(*this); - } - - SwigPyIterator *incr(size_t n = 1) - { - while (n--) { - if (base::current == end) { - throw stop_iteration(); - } else { - ++base::current; - } - } - return this; - } SwigPyIterator *decr(size_t n = 1) { while (n--) { - if (base::current == begin) { + if (base::current == base0::begin) { throw stop_iteration(); } else { --base::current; @@ -373,10 +333,6 @@ namespace swig { } return this; } - - private: - out_iterator begin; - out_iterator end; };