49 lines
1.2 KiB
C++
49 lines
1.2 KiB
C++
// 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)
|
|
//
|
|
// Credits:
|
|
// Andreas Kl\:ockner for fixing increment() to handle
|
|
// error conditions.
|
|
|
|
#include <boost/python/object.hpp>
|
|
#include <boost/python/handle.hpp>
|
|
#include <boost/python/object/stl_iterator_core.hpp>
|
|
|
|
namespace boost { namespace python { namespace objects
|
|
{
|
|
|
|
stl_input_iterator_impl::stl_input_iterator_impl()
|
|
: it_()
|
|
, ob_()
|
|
{
|
|
}
|
|
|
|
stl_input_iterator_impl::stl_input_iterator_impl(boost::python::object const &ob)
|
|
: it_(ob.attr("__iter__")())
|
|
, ob_()
|
|
{
|
|
this->increment();
|
|
}
|
|
|
|
void stl_input_iterator_impl::increment()
|
|
{
|
|
this->ob_ = boost::python::handle<>(
|
|
boost::python::allow_null(PyIter_Next(this->it_.ptr())));
|
|
if (PyErr_Occurred())
|
|
throw boost::python::error_already_set();
|
|
}
|
|
|
|
bool stl_input_iterator_impl::equal(stl_input_iterator_impl const &that) const
|
|
{
|
|
return !this->ob_ == !that.ob_;
|
|
}
|
|
|
|
boost::python::handle<> const &stl_input_iterator_impl::current() const
|
|
{
|
|
return this->ob_;
|
|
}
|
|
|
|
}}} // namespace boost::python::objects
|