You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
61 lines
1.3 KiB
61 lines
1.3 KiB
// Copyright Eric Niebler 2005. |
|
// Distributed under the Boost Software License, Version 1.0. (See |
|
// accompanying file LICENSE_1_0.txt or copy at |
|
// http://www.boost.org/LICENSE_1_0.txt) |
|
#ifndef STL_ITERATOR_EAN20051028_HPP |
|
# define STL_ITERATOR_EAN20051028_HPP |
|
|
|
# include <boost/python/detail/prefix.hpp> |
|
|
|
# include <boost/python/object/stl_iterator_core.hpp> |
|
|
|
# include <boost/iterator/iterator_facade.hpp> |
|
|
|
namespace boost { namespace python |
|
{ |
|
|
|
// An STL input iterator over a python sequence |
|
template<typename ValueT> |
|
struct stl_input_iterator |
|
: boost::iterator_facade< |
|
stl_input_iterator<ValueT> |
|
, ValueT |
|
, std::input_iterator_tag |
|
, ValueT |
|
> |
|
{ |
|
stl_input_iterator() |
|
: impl_() |
|
{ |
|
} |
|
|
|
// ob is the python sequence |
|
stl_input_iterator(boost::python::object const &ob) |
|
: impl_(ob) |
|
{ |
|
} |
|
|
|
private: |
|
friend class boost::iterator_core_access; |
|
|
|
void increment() |
|
{ |
|
this->impl_.increment(); |
|
} |
|
|
|
ValueT dereference() const |
|
{ |
|
return extract<ValueT>(this->impl_.current().get())(); |
|
} |
|
|
|
bool equal(stl_input_iterator<ValueT> const &that) const |
|
{ |
|
return this->impl_.equal(that.impl_); |
|
} |
|
|
|
objects::stl_input_iterator_impl impl_; |
|
}; |
|
|
|
}} // namespace boost::python |
|
|
|
#endif // STL_ITERATOR_EAN20051028_HPP
|
|
|