[section boost/python/stl_iterator.hpp] [section Introduction] provides types for creating C++ Iterators from [@http://www.python.org/doc/current/lib/typeiter.html Python iterables]. [endsect] [section Class template `stl_input_iterator`] Instances of `stl_input_iterator` hold a Python iterator and adapt it for use with STL algorithms. `stl_input_iterator` satisfies the requirements for an Input Iterator. [table [[Template Parameter][Requirements][Semantics][Default]] [[ValueType][ValueType must be CopyConstructible.][Dereferencing an instance of `stl_input_iterator` will return an rvalue of type ValueType.][None]] ] `` namespace boost { namespace python { template struct stl_input_iterator { typedef std::ptrdiff_t difference_type; typedef ValueType value_type; typedef ValueType* pointer; typedef ValueType reference; typedef std::input_iterator_tag iterator_category; stl_input_iterator(); stl_input_iterator(object const& ob); stl_input_iterator& operator++(); stl_input_iterator operator++(int); ValueType operator*() const; friend bool operator==(stl_input_iterator const& lhs, stl_input_iterator const& rhs); friend bool operator!=(stl_input_iterator const& lhs, stl_input_iterator const& rhs); private: object it; // For exposition only object ob; // For exposition only }; }} `` [endsect] [section Class template `stl_input_iterator` constructors] `` stl_input_iterator() `` [variablelist [[Effects][Creates a past-the-end input iterator, useful for signifying the end of a sequence. ]] [[Postconditions][`this` is past-the-end]] [[Throws][Nothing.]] ] ``stl_input_iterator(object const& ob)`` [variablelist [[Effects][Calls ob.attr("__iter__")() and stores the resulting Python iterator object in this->it. Then, calls this->it.attr("next")() and stores the result in this->ob. If the sequence is exhausted, sets this->ob to object(). ]] [[Postconditions][this is a dereferenceable or past-the-end.]] ] [endsect] [section Class template `stl_input_iterator` modifiers] `` stl_input_iterator &operator++() `` [variablelist [[Effects][Calls this->it.attr("next")() and stores the result in this->ob. If the sequence is exhausted, sets this->ob to object(). ]] [[Postconditions][this is a dereferenceable or past-the-end.]] [[Returns][`*this`]] ] ``stl_input_iterator &operator++(int)`` [variablelist [[Effects][`stl_input_iterator tmp = *this; ++*this; return tmp;`]] [[Postconditions][this is a dereferenceable or past-the-end.]] ] [endsect] [section Class template `stl_input_iterator` observers] `` ValueType operator*() const `` [variablelist [[Effects][Returns the current element in the sequence. ]] [[Returns][`extract(this->ob);`]] ] `` friend bool operator==(stl_input_iterator const& lhs, stl_input_iterator const& rhs) `` [variablelist [[Effects][Returns true if both iterators are dereferenceable or if both iterators are past-the-end, false otherwise. ]] [[Returns][`(lhs.ob == object()) == (rhs.ob == object())`]] ] `` friend bool operator!=(stl_input_iterator const& lhs, stl_input_iterator const& rhs) `` [variablelist [[Effects][Returns false if both iterators are dereferenceable or if both iterators are past-the-end, true otherwise. ]] [[Returns][`!(lhs == rhs)`]] ] [endsect] [section Example] `` #include #include #include using namespace boost::python; std::list sequence_to_int_list(object const& ob) { stl_input_iterator begin(ob), end; return std::list(begin, end); } `` [endsect] [endsect]