8 #ifndef BOOST_GIL_IO_SCANLINE_READ_ITERATOR_HPP 9 #define BOOST_GIL_IO_SCANLINE_READ_ITERATOR_HPP 11 #include <boost/gil/io/error.hpp> 12 #include <boost/gil/io/typedefs.hpp> 14 #include <boost/iterator/iterator_facade.hpp> 20 namespace boost {
namespace gil {
22 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) 24 #pragma warning(disable:4512) //assignment operator could not be generated 28 template <
typename Reader>
30 :
public boost::iterator_facade<scanline_read_iterator<Reader>, byte_t*, std::input_iterator_tag>
33 using base_t = boost::iterator_facade
37 std::input_iterator_tag
41 : reader_(reader), pos_(pos)
43 buffer_ = std::make_shared<buffer_t>(buffer_t(reader_._scanline_length));
44 buffer_start_ = &buffer_->front();
48 friend class boost::iterator_core_access;
54 reader_.skip(buffer_start_, pos_);
59 skip_scanline_ =
true;
60 read_scanline_ =
true;
65 return pos_ == rhs.pos_;
68 typename base_t::reference dereference()
const 72 reader_.read(buffer_start_, pos_);
74 skip_scanline_ =
false;
75 read_scanline_ =
false;
84 mutable bool read_scanline_ =
true;
85 mutable bool skip_scanline_ =
true;
87 using buffer_t = std::vector<byte_t>;
88 using buffer_ptr_t = std::shared_ptr<buffer_t>;
90 mutable byte_t* buffer_start_ =
nullptr;
93 #if BOOST_WORKAROUND(BOOST_MSVC, >= 1400) Input iterator to read images.
Definition: scanline_read_iterator.hpp:29
BOOST_FORCEINLINE bool equal(boost::gil::iterator_from_2d< Loc1 > first, boost::gil::iterator_from_2d< Loc1 > last, boost::gil::iterator_from_2d< Loc2 > first2)
std::equal(I1,I1,I2) with I1 and I2 being a iterator_from_2d
Definition: algorithm.hpp:1029