30 :
public boost::stl_interfaces::iterator_interface<scanline_read_iterator<Reader>, byte_t*, std::input_iterator_tag>
33 using base_t = boost::stl_interfaces::iterator_interface
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();
47 constexpr auto operator*()
const noexcept {
return dereference(); }
52 friend struct boost::stl_interfaces::access;
58 reader_.skip(buffer_start_, pos_);
63 skip_scanline_ =
true;
64 read_scanline_ =
true;
69 return pos_ == rhs.pos_;
72 typename base_t::reference dereference()
const
76 reader_.read(buffer_start_, pos_);
78 skip_scanline_ =
false;
79 read_scanline_ =
false;
88 mutable bool read_scanline_ =
true;
89 mutable bool skip_scanline_ =
true;
91 using buffer_t = std::vector<byte_t>;
92 using buffer_ptr_t = std::shared_ptr<buffer_t>;
94 mutable byte_t* buffer_start_ =
nullptr;