summaryrefslogtreecommitdiff
path: root/src/display_buffer.cc
diff options
context:
space:
mode:
authorMaxime Coste <frrrwww@gmail.com>2012-04-05 02:00:34 +0000
committerMaxime Coste <frrrwww@gmail.com>2012-04-05 02:00:34 +0000
commitaf5c528f043f663b94ce197b0c70ddb3da9224e8 (patch)
tree826834f1e6e60a7ba14180b2f4561526de0c33e8 /src/display_buffer.cc
parente4b872abd26405a7c26ffbd14dff91c816750601 (diff)
use std::upper_bound in DisplayBuffer::atom_containing to run in O(log n)
Diffstat (limited to 'src/display_buffer.cc')
-rw-r--r--src/display_buffer.cc10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/display_buffer.cc b/src/display_buffer.cc
index 8f90901d..133c843f 100644
--- a/src/display_buffer.cc
+++ b/src/display_buffer.cc
@@ -1,6 +1,7 @@
#include "display_buffer.hh"
#include "assert.hh"
+#include <algorithm>
namespace Kakoune
{
@@ -92,12 +93,9 @@ DisplayBuffer::iterator DisplayBuffer::atom_containing(const BufferIterator& whe
DisplayBuffer::iterator DisplayBuffer::atom_containing(const BufferIterator& where,
iterator start)
{
- for (iterator it = start; it != m_atoms.end(); ++it)
- {
- if (it->end() > where)
- return it->begin() <= where ? it : end();
- }
- return end();
+ return std::upper_bound(start, end(), where,
+ [](const BufferIterator& where, const DisplayAtom& atom)
+ { return where < atom.end(); });
}
DisplayBuffer::iterator DisplayBuffer::split(iterator atom, const BufferIterator& pos)