Add Buffer::Range

This commit is contained in:
Josh Holtrop 2017-11-21 18:36:11 -05:00
parent c3852e950a
commit bdf7ceac4e

View File

@ -19,6 +19,8 @@ public:
INVALID_CHANGE_OPERATION_INDEX = 0xFFFFFFFFu, INVALID_CHANGE_OPERATION_INDEX = 0xFFFFFFFFu,
}; };
struct Range;
class Iterator class Iterator
{ {
public: public:
@ -98,11 +100,51 @@ public:
size_t offset() const { return m_offset; } size_t offset() const { return m_offset; }
protected: protected:
friend struct Range;
const Buffer * m_buffer; const Buffer * m_buffer;
size_t m_offset; size_t m_offset;
size_t m_line; size_t m_line;
}; };
struct Range
{
std::shared_ptr<Iterator> start;
std::shared_ptr<Iterator> end;
Range(std::shared_ptr<Iterator> _start, std::shared_ptr<Iterator> _end)
: start(_start), end(_end)
{
}
bool valid() const
{
return start->valid() && (!end->valid() || (*start <= *end));
}
size_t start_offset() const
{
return start->offset();
}
size_t end_offset() const
{
if (end->valid())
{
return end->offset();
}
else
{
return start->m_buffer->size();
}
}
size_t size() const
{
return end_offset() - start_offset();
}
};
Buffer(); Buffer();
Buffer(const char * filename); Buffer(const char * filename);
Buffer(const uint8_t * data, size_t data_length); Buffer(const uint8_t * data, size_t data_length);