From bdf7ceac4eafc59d732f7d7c8f547a47362f1365 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Tue, 21 Nov 2017 18:36:11 -0500 Subject: [PATCH] Add Buffer::Range --- src/core/Buffer.h | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/src/core/Buffer.h b/src/core/Buffer.h index b74d484..95afabf 100644 --- a/src/core/Buffer.h +++ b/src/core/Buffer.h @@ -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 start; + std::shared_ptr end; + + Range(std::shared_ptr _start, std::shared_ptr _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);