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,
};
struct Range;
class Iterator
{
public:
@ -98,11 +100,51 @@ public:
size_t offset() const { return m_offset; }
protected:
friend struct Range;
const Buffer * m_buffer;
size_t m_offset;
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(const char * filename);
Buffer(const uint8_t * data, size_t data_length);