summaryrefslogtreecommitdiff
path: root/src/buffer.hh
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2015-01-19 19:31:56 +0000
committerMaxime Coste <frrrwww@gmail.com>2015-01-19 19:31:56 +0000
commitb1281d225d5baa73dc0763627d18bb45a4dc97b2 (patch)
tree587563a28812f1400921763e3b936fd306e695a0 /src/buffer.hh
parent3697548e35d8edb2558217b129db9fec89137c34 (diff)
rename SharedString::Storage to StringStorage and use directly in Buffer
Diffstat (limited to 'src/buffer.hh')
-rw-r--r--src/buffer.hh22
1 files changed, 18 insertions, 4 deletions
diff --git a/src/buffer.hh b/src/buffer.hh
index 6121d36f..e36d5580 100644
--- a/src/buffer.hh
+++ b/src/buffer.hh
@@ -121,9 +121,12 @@ public:
BufferIterator end() const;
LineCount line_count() const;
- const SharedString& operator[](LineCount line) const
+ StringView operator[](LineCount line) const
{ return m_lines[line]; }
+ SharedString shared_line(LineCount line) const
+ { return m_lines.get_shared(line); }
+
// returns an iterator at given coordinates. clamp line_and_column
BufferIterator iterator_at(ByteCoord coord) const;
@@ -166,16 +169,27 @@ private:
void on_option_changed(const Option& option) override;
- using LineListBase = Vector<SharedString, MemoryDomain::BufferContent>;
+ using LineListBase = Vector<ref_ptr<StringStorage>, MemoryDomain::BufferContent>;
struct LineList : LineListBase
{
[[gnu::always_inline]]
- SharedString& operator[](LineCount line)
+ ref_ptr<StringStorage>& get_storage(LineCount line)
{ return LineListBase::operator[]((int)line); }
[[gnu::always_inline]]
- const SharedString& operator[](LineCount line) const
+ const ref_ptr<StringStorage>& get_storage(LineCount line) const
{ return LineListBase::operator[]((int)line); }
+
+ [[gnu::always_inline]]
+ SharedString get_shared(LineCount line) const
+ { return SharedString{get_storage(line)}; }
+
+ [[gnu::always_inline]]
+ StringView operator[](LineCount line) const
+ { return get_storage(line)->strview(); }
+
+ StringView front() const { return LineListBase::front()->strview(); }
+ StringView back() const { return LineListBase::back()->strview(); }
};
LineList m_lines;