From cfd7ee049a7c668bb2269029d159b34d2014ece6 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Tue, 11 Dec 2012 19:51:59 +0100 Subject: move selection updating code out of selection, to DynamicSelectionList this avoids a lot of unnecessary (add|remove)_change_listener as creating temporary Selections do not call that anymore. Use can choose between a SelectionList which or a DynamicSelectionList depending on wethear the buffer will be modified or not during the selections lifetime. --- src/selection.cc | 88 ++------------------------------------------------------ 1 file changed, 3 insertions(+), 85 deletions(-) (limited to 'src/selection.cc') diff --git a/src/selection.cc b/src/selection.cc index 6234e1c2..bc156f26 100644 --- a/src/selection.cc +++ b/src/selection.cc @@ -24,62 +24,10 @@ BufferIterator Range::end() const return utf8::next(std::max(m_first, m_last)); } -Selection::Selection(const BufferIterator& first, const BufferIterator& last, - CaptureList captures) - : Range{first, last}, m_captures{std::move(captures)} +void Range::check_invariant() const { - check_invariant(); - register_with_buffer(); -} - -Selection::Selection(const Selection& other) - : Range(other), m_captures(other.m_captures) -{ - register_with_buffer(); -} - -Selection::Selection(Selection&& other) - : Range{other}, - m_captures{std::move(other.m_captures)} -{ - register_with_buffer(); -} - -Selection::~Selection() -{ - unregister_with_buffer(); -} - -Selection& Selection::operator=(const Selection& other) -{ - const bool new_buffer = &first().buffer() != &other.first().buffer(); - if (new_buffer) - unregister_with_buffer(); - - first() = other.first(); - last() = other.last(); - m_captures = other.m_captures; - - if (new_buffer) - register_with_buffer(); - - return *this; -} - -Selection& Selection::operator=(Selection&& other) -{ - const bool new_buffer = &first().buffer() != &other.first().buffer(); - if (new_buffer) - unregister_with_buffer(); - - first() = other.first(); - last() = other.last(); - m_captures = std::move(other.m_captures); - - if (new_buffer) - register_with_buffer(); - - return *this; + assert(utf8::is_character_start(first())); + assert(utf8::is_character_start(last())); } static void avoid_eol(BufferIterator& it) @@ -95,34 +43,4 @@ void Selection::avoid_eol() Kakoune::avoid_eol(last()); } -void Selection::on_insert(const BufferIterator& begin, const BufferIterator& end) -{ - first().on_insert(begin.coord(), end.coord()); - last().on_insert(begin.coord(), end.coord()); - check_invariant(); -} - -void Selection::on_erase(const BufferIterator& begin, const BufferIterator& end) -{ - first().on_erase(begin.coord(), end.coord()); - last().on_erase(begin.coord(), end.coord()); - check_invariant(); -} - -void Selection::register_with_buffer() -{ - first().buffer().add_change_listener(*this); -} - -void Selection::unregister_with_buffer() -{ - first().buffer().remove_change_listener(*this); -} - -void Selection::check_invariant() const -{ - assert(utf8::is_character_start(first())); - assert(utf8::is_character_start(last())); -} - } -- cgit v1.2.3