diff options
| author | Maxime Coste <mawww@kakoune.org> | 2018-06-11 13:33:26 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2018-06-11 15:10:30 +1000 |
| commit | df90ba598470fe722ac6322fff43928f07782c59 (patch) | |
| tree | 11bac25cddc4cedd5759cd59a269a668cd71623f /src/changes.hh | |
| parent | 539832bf29c27841490d1679c34bd956d1855a55 (diff) | |
Extract update_ranges_ifn as a general utility function
Diffstat (limited to 'src/changes.hh')
| -rw-r--r-- | src/changes.hh | 26 |
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 |
