From df90ba598470fe722ac6322fff43928f07782c59 Mon Sep 17 00:00:00 2001 From: Maxime Coste Date: Mon, 11 Jun 2018 13:33:26 +1000 Subject: Extract update_ranges_ifn as a general utility function --- src/changes.hh | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) (limited to 'src/changes.hh') 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 changes, RangeContainer& ran } } +template +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 -- cgit v1.2.3