summaryrefslogtreecommitdiff
path: root/src/buffer.hh
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2024-12-20 22:09:32 +1100
committerMaxime Coste <mawww@kakoune.org>2025-01-22 08:18:32 +1100
commit2856b99e0914cc7a659977f2b33308cb5b4c9bb7 (patch)
treeed643f3751447ec3e65deeb228c3f826627d6174 /src/buffer.hh
parent28a82b06b017e3771d0efe97bfa9bd2d1f06db91 (diff)
WIP linked list shared strings
Diffstat (limited to 'src/buffer.hh')
-rw-r--r--src/buffer.hh13
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;