diff options
| author | Maxime Coste <mawww@kakoune.org> | 2020-04-06 11:13:24 +1000 |
|---|---|---|
| committer | Maxime Coste <mawww@kakoune.org> | 2020-04-06 11:23:47 +1000 |
| commit | f7a2ecfacb566a219d9deef3a5cfaa2d1c5bd404 (patch) | |
| tree | eb044d77d2c31c40b4b99767b22bca9e505f44ba /src/changes.hh | |
| parent | c585107ab5e7155f7da648c3752cf360f7156177 (diff) | |
Support empty ranges in replace-ranges highlighter
Diffstat (limited to 'src/changes.hh')
| -rw-r--r-- | src/changes.hh | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/src/changes.hh b/src/changes.hh index 5b64cbec..5ebb3ded 100644 --- a/src/changes.hh +++ b/src/changes.hh @@ -28,6 +28,21 @@ struct ForwardChangesTracker const Buffer::Change* forward_sorted_until(const Buffer::Change* first, const Buffer::Change* last); const Buffer::Change* backward_sorted_until(const Buffer::Change* first, const Buffer::Change* last); +template<typename Range, typename AdvanceFunc> +auto update_range(ForwardChangesTracker& changes_tracker, Range& range, AdvanceFunc&& advance_while_relevant) +{ + auto& first = get_first(range); + auto& last = get_last(range); + advance_while_relevant(first); + first = changes_tracker.get_new_coord_tolerant(first); + + if (last < BufferCoord{0,0}) + return; + + advance_while_relevant(last); + last = changes_tracker.get_new_coord_tolerant(last); +} + template<typename RangeContainer> void update_forward(ConstArrayView<Buffer::Change> changes, RangeContainer& ranges) { @@ -39,15 +54,7 @@ void update_forward(ConstArrayView<Buffer::Change> changes, RangeContainer& rang }; for (auto& range : ranges) - { - auto& first = get_first(range); - auto& last = get_last(range); - advance_while_relevant(first); - first = changes_tracker.get_new_coord_tolerant(first); - - advance_while_relevant(last); - last = changes_tracker.get_new_coord_tolerant(last); - } + update_range(changes_tracker, range, advance_while_relevant); } template<typename RangeContainer> @@ -69,15 +76,7 @@ void update_backward(ConstArrayView<Buffer::Change> changes, RangeContainer& ran }; for (auto& range : ranges) - { - auto& first = get_first(range); - auto& last = get_last(range); - advance_while_relevant(first); - first = changes_tracker.get_new_coord_tolerant(first); - - advance_while_relevant(last); - last = changes_tracker.get_new_coord_tolerant(last); - } + update_range(changes_tracker, range, advance_while_relevant); } template<typename RangeContainer> |
