// Copyright {Jagger Software Limited} 2003 #ifndef CONTAINER_LINE_VIEW_INCLUDED #define CONTAINER_LINE_VIEW_INCLUDED #include "container/range_view.hpp" #include #include namespace container { template class line_view // <> { public: // 'tors line_view(iterator, iterator); // compiler generated copy c'tor ok // compiler generated non virtual d'tor ok public: // limits iterator begin() const; iterator end() const; public: // iterator --> line/row/col range_view to_line(iterator) const; // [begin(), end()) size_t line_number(iterator) const; size_t column_number(iterator) const; public: // line# --> line size_t last_line_number() const; range_view operator[](size_t) const; // [1, last_line_number()] private: // implementation size_t distance_to(iterator) const; size_t iterator_to_line_number(iterator) const; iterator line_number_to_line_start(size_t) const; private: // validation void range_check(size_t) const; private: // inappropriate line_view & operator=(const line_view &); private: // state const range_view source; ::std::vector line_starts; }; // convenience template line_view make_line_view(iterator, iterator); } #include "container/line_view-template.hpp" #endif