| #ifndef IMAGE_IO_BASE_DATA_LINE_MAP_H_ // NOLINT |
| #define IMAGE_IO_BASE_DATA_LINE_MAP_H_ // NOLINT |
| |
| #include <vector> |
| |
| #include "image_io/base/data_range.h" |
| #include "image_io/base/data_segment.h" |
| |
| namespace photos_editing_formats { |
| namespace image_io { |
| |
| /// The line number and range of a text line in a data source. The range does |
| /// not include the terminating new line. Valid line numbers are greater than 0. |
| struct DataLine { |
| DataLine() : number(0) {} |
| DataLine(size_t a_number, const DataRange& a_range) |
| : number(a_number), range(a_range) {} |
| size_t number; |
| DataRange range; |
| }; |
| |
| /// A class that maps a data source location to a data line structure that has |
| /// the line number and data range of the line. |
| class DataLineMap { |
| public: |
| DataLineMap() : last_line_incomplete_(false) {} |
| |
| /// Returns the number of data lines in the map. |
| size_t GetDataLineCount() const; |
| |
| /// Returns the data line assocated with the location, or one the number of |
| /// which is zero and the range of which is invalid. |
| DataLine GetDataLine(size_t location) const; |
| |
| /// Finds the next set of data line numbers and ranges in the segment and adds |
| /// them to the map. If the map is empty, the line numbers will start at 1; |
| /// otherwise the numbering of the new lines will start at the next line |
| /// number indicated in the map. |
| void FindDataLines(const DataRange& range, const DataSegment& segment); |
| |
| /// Clears the map and returns it to its startup state. |
| void Clear(); |
| |
| private: |
| /// The data lines in the map, sorted by ascending range.GetBegin() value. |
| std::vector<DataLine> data_lines_; |
| |
| /// Whether the last data line in the vector is complete (ended in a newline). |
| bool last_line_incomplete_; |
| }; |
| |
| } // namespace image_io |
| } // namespace photos_editing_formats |
| |
| #endif // IMAGE_IO_ BASE_DATA_LINE_MAP_H_ // NOLINT |