summaryrefslogtreecommitdiff
path: root/src/changes.hh
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 /src/changes.hh
parent539832bf29c27841490d1679c34bd956d1855a55 (diff)
Extract update_ranges_ifn as a general utility function
Diffstat (limited to 'src/changes.hh')
-rw-r--r--src/changes.hh26
1 files changed, 26 insertions, 0 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