From d29fa04adc6a15c8d62ffcd4390e5fc785d92b62 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Tue, 3 Dec 2024 21:26:57 +1100 Subject: Do not store buffer pointer in BufferIterator This makes BufferIterator smaller and trivially move/copyable --- src/buffer.hh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) (limited to 'src/buffer.hh') diff --git a/src/buffer.hh b/src/buffer.hh index fd748213..2b27f7c3 100644 --- a/src/buffer.hh +++ b/src/buffer.hh @@ -64,8 +64,9 @@ public: // costly, so this is not strictly random access using iterator_category = std::bidirectional_iterator_tag; - BufferIterator() noexcept : m_buffer{nullptr}, m_line{} {} + BufferIterator() = default; BufferIterator(const Buffer& buffer, BufferCoord coord) noexcept; + BufferIterator(ArrayView lines, BufferCoord coord) noexcept; bool operator== (const BufferIterator& iterator) const noexcept; auto operator<=>(const BufferIterator& iterator) const noexcept; @@ -75,7 +76,7 @@ public: const char& operator[](size_t n) const noexcept; size_t operator- (const BufferIterator& iterator) const; - explicit operator bool() const { return static_cast(m_buffer); } + explicit operator bool() const { return not m_lines.empty(); } BufferIterator operator+ (ByteCount size) const; BufferIterator operator- (ByteCount size) const; @@ -94,7 +95,6 @@ public: using Sentinel = BufferCoord; private: - SafePtr m_buffer; ArrayView m_lines; BufferCoord m_coord; StringView m_line; @@ -159,9 +159,12 @@ public: String string(BufferCoord begin, BufferCoord end) const; StringView substr(BufferCoord begin, BufferCoord end) const; + static BufferCoord advance(ArrayView lines, BufferCoord coord, ByteCount count); + static ByteCount distance(ArrayView lines, BufferCoord begin, BufferCoord end); + const char& byte_at(BufferCoord c) const; - ByteCount distance(BufferCoord begin, BufferCoord end) const; - BufferCoord advance(BufferCoord coord, ByteCount count) const; + ByteCount distance(BufferCoord begin, BufferCoord end) const { return distance(m_lines, begin, end); } + BufferCoord advance(BufferCoord coord, ByteCount count) const { return advance(m_lines, coord, count); } BufferCoord next(BufferCoord coord) const; BufferCoord prev(BufferCoord coord) const; -- cgit v1.2.3