diff options
| author | Maxime Coste <mawww@kakoune.org> | 2024-12-20 22:09:32 +1100 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2025-01-22 08:18:32 +1100 |
| commit | 2856b99e0914cc7a659977f2b33308cb5b4c9bb7 (patch) | |
| tree | ed643f3751447ec3e65deeb228c3f826627d6174 /src/buffer.hh | |
| parent | 28a82b06b017e3771d0efe97bfa9bd2d1f06db91 (diff) | |
WIP linked list shared strings
Diffstat (limited to 'src/buffer.hh')
| -rw-r--r-- | src/buffer.hh | 13 |
1 files changed, 6 insertions, 7 deletions
diff --git a/src/buffer.hh b/src/buffer.hh index 50423502..df899f44 100644 --- a/src/buffer.hh +++ b/src/buffer.hh @@ -66,17 +66,17 @@ public: BufferIterator() = default; BufferIterator(const Buffer& buffer, BufferCoord coord) noexcept; - BufferIterator(const StringDataPtr* lines, LineCount line_count, BufferCoord coord) noexcept; + BufferIterator(const StringData* line, BufferCoord coord) noexcept; bool operator== (const BufferIterator& iterator) const noexcept; auto operator<=>(const BufferIterator& iterator) const noexcept; bool operator== (const BufferCoord& coord) const noexcept; - const char& operator* () const noexcept; + const char& operator*() const noexcept; const char& operator[](size_t n) const noexcept; size_t operator- (const BufferIterator& iterator) const; - explicit operator bool() const { return m_lines; } + explicit operator bool() const { return m_line; } BufferIterator operator+ (ByteCount size) const; BufferIterator operator- (ByteCount size) const; @@ -95,9 +95,7 @@ public: using Sentinel = BufferCoord; private: - const StringDataPtr* m_lines; - [[no_unique_address]] StringView m_line; - [[no_unique_address]] LineCount m_line_count; + const StringData* m_line; BufferCoord m_coord; }; @@ -188,7 +186,7 @@ public: { return m_lines[line]; } const StringDataPtr& line_storage(LineCount line) const - { return m_lines.get_storage(line); } + { return line == line_count() ? m_sentinel : m_lines.get_storage(line); } // returns an iterator at given coordinates. clamp line_and_column BufferIterator iterator_at(BufferCoord coord) const; @@ -289,6 +287,7 @@ private: StringView back() const { return BufferLines::back()->strview(); } }; LineList m_lines; + StringDataPtr m_sentinel = StringData::create(""); String m_name; String m_display_name; |
