summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaxime Coste <mawww@kakoune.org>2018-06-11 13:33:26 +1000
committerMaxime Coste <mawww@kakoune.org>2018-06-11 15:10:30 +1000
commitdf90ba598470fe722ac6322fff43928f07782c59 (patch)
tree11bac25cddc4cedd5759cd59a269a668cd71623f
parent539832bf29c27841490d1679c34bd956d1855a55 (diff)
Extract update_ranges_ifn as a general utility function
-rw-r--r--src/changes.hh26
-rw-r--r--src/highlighters.cc31
2 files changed, 29 insertions, 28 deletions
diff --git a/src/changes.hh b/src/changes.hh
index ffae651a..638a4bcb 100644
--- a/src/changes.hh
+++ b/src/changes.hh
@@ -80,6 +80,32 @@ void update_backward(ConstArrayView<Buffer::Change> changes, RangeContainer& ran
}
}
+template<typename RangeContainer>
+void update_ranges(Buffer& buffer, size_t& timestamp, RangeContainer& ranges)
+{
+ if (timestamp == buffer.timestamp())
+ return;
+
+ auto changes = buffer.changes_since(timestamp);
+ for (auto change_it = changes.begin(); change_it != changes.end(); )
+ {
+ auto forward_end = forward_sorted_until(change_it, changes.end());
+ auto backward_end = backward_sorted_until(change_it, changes.end());
+
+ if (forward_end >= backward_end)
+ {
+ update_forward({ change_it, forward_end }, ranges);
+ change_it = forward_end;
+ }
+ else
+ {
+ update_backward({ change_it, backward_end }, ranges);
+ change_it = backward_end;
+ }
+ }
+ timestamp = buffer.timestamp();
+}
+
}
#endif // changes_hh_INCLUDED
diff --git a/src/highlighters.cc b/src/highlighters.cc
index bd5ad191..3f9fbf46 100644
--- a/src/highlighters.cc
+++ b/src/highlighters.cc
@@ -1406,31 +1406,6 @@ InclusiveBufferRange option_from_string(Meta::Type<InclusiveBufferRange>, String
BufferCoord& get_first(RangeAndString& r) { return std::get<0>(r).first; }
BufferCoord& get_last(RangeAndString& r) { return std::get<0>(r).last; }
-static void update_ranges_ifn(const Buffer& buffer, RangeAndStringList& range_and_faces)
-{
- if (range_and_faces.prefix == buffer.timestamp())
- return;
-
- auto changes = buffer.changes_since(range_and_faces.prefix);
- for (auto change_it = changes.begin(); change_it != changes.end(); )
- {
- auto forward_end = forward_sorted_until(change_it, changes.end());
- auto backward_end = backward_sorted_until(change_it, changes.end());
-
- if (forward_end >= backward_end)
- {
- update_forward({ change_it, forward_end }, range_and_faces.list);
- change_it = forward_end;
- }
- else
- {
- update_backward({ change_it, backward_end }, range_and_faces.list);
- change_it = backward_end;
- }
- }
- range_and_faces.prefix = buffer.timestamp();
-}
-
void option_list_postprocess(Vector<RangeAndString, MemoryDomain::Options>& opt)
{
std::sort(opt.begin(), opt.end(),
@@ -1443,7 +1418,7 @@ void option_list_postprocess(Vector<RangeAndString, MemoryDomain::Options>& opt)
void option_update(RangeAndStringList& opt, const Context& context)
{
- update_ranges_ifn(context.buffer(), opt);
+ update_ranges(context.buffer(), opt.prefix, opt.list);
}
struct RangesHighlighter : Highlighter
@@ -1469,7 +1444,7 @@ private:
{
auto& buffer = context.context.buffer();
auto& range_and_faces = context.context.options()[m_option_name].get_mutable<RangeAndStringList>();
- update_ranges_ifn(buffer, range_and_faces);
+ update_ranges(buffer, range_and_faces.prefix, range_and_faces.list);
for (auto& range : range_and_faces.list)
{
@@ -1511,7 +1486,7 @@ private:
{
auto& buffer = context.context.buffer();
auto& range_and_faces = context.context.options()[m_option_name].get_mutable<RangeAndStringList>();
- update_ranges_ifn(buffer, range_and_faces);
+ update_ranges(buffer, range_and_faces.prefix, range_and_faces.list);
for (auto& range : range_and_faces.list)
{