Chris@16: // Copyright Eric Niebler 2005. Chris@16: // Distributed under the Boost Software License, Version 1.0. (See Chris@16: // accompanying file LICENSE_1_0.txt or copy at Chris@16: // http://www.boost.org/LICENSE_1_0.txt) Chris@16: #ifndef STL_ITERATOR_EAN20051028_HPP Chris@16: # define STL_ITERATOR_EAN20051028_HPP Chris@16: Chris@16: # include Chris@16: Chris@16: # include Chris@16: Chris@16: # include Chris@16: Chris@16: namespace boost { namespace python Chris@16: { Chris@16: Chris@16: // An STL input iterator over a python sequence Chris@16: template Chris@16: struct stl_input_iterator Chris@16: : boost::iterator_facade< Chris@16: stl_input_iterator Chris@16: , ValueT Chris@16: , std::input_iterator_tag Chris@16: , ValueT Chris@16: > Chris@16: { Chris@16: stl_input_iterator() Chris@16: : impl_() Chris@16: { Chris@16: } Chris@16: Chris@16: // ob is the python sequence Chris@16: stl_input_iterator(boost::python::object const &ob) Chris@16: : impl_(ob) Chris@16: { Chris@16: } Chris@16: Chris@16: private: Chris@16: friend class boost::iterator_core_access; Chris@16: Chris@16: void increment() Chris@16: { Chris@16: this->impl_.increment(); Chris@16: } Chris@16: Chris@16: ValueT dereference() const Chris@16: { Chris@16: return extract(this->impl_.current().get())(); Chris@16: } Chris@16: Chris@16: bool equal(stl_input_iterator const &that) const Chris@16: { Chris@16: return this->impl_.equal(that.impl_); Chris@16: } Chris@16: Chris@16: objects::stl_input_iterator_impl impl_; Chris@16: }; Chris@16: Chris@16: }} // namespace boost::python Chris@16: Chris@16: #endif // STL_ITERATOR_EAN20051028_HPP