From 391226f67e1260eb77e7d3122d43281aa6ccd5ab Mon Sep 17 00:00:00 2001 From: Neil Date: Thu, 1 Feb 2018 09:22:14 +1100 Subject: Backport: Templatize RunStyles so it can be over ranges of different types and contain different style types. Currently only instantiated over . Backport of changeset 6445:89d992f380a1. --- src/RunStyles.cxx | 120 ++++++++++++++++++++++++++++++++---------------------- 1 file changed, 72 insertions(+), 48 deletions(-) (limited to 'src/RunStyles.cxx') diff --git a/src/RunStyles.cxx b/src/RunStyles.cxx index a365df6e9..f3939bbd2 100644 --- a/src/RunStyles.cxx +++ b/src/RunStyles.cxx @@ -26,8 +26,9 @@ using namespace Scintilla; // Find the first run at a position -int RunStyles::RunFromPosition(int position) const { - int run = starts->PartitionFromPosition(position); +template +DISTANCE RunStyles::RunFromPosition(DISTANCE position) const { + DISTANCE run = starts->PartitionFromPosition(position); // Go to first element with this position while ((run > 0) && (position == starts->PositionFromPartition(run-1))) { run--; @@ -36,11 +37,12 @@ int RunStyles::RunFromPosition(int position) const { } // If there is no run boundary at position, insert one continuing style. -int RunStyles::SplitRun(int position) { - int run = RunFromPosition(position); - const int posRun = starts->PositionFromPartition(run); +template +DISTANCE RunStyles::SplitRun(DISTANCE position) { + DISTANCE run = RunFromPosition(position); + const DISTANCE posRun = starts->PositionFromPartition(run); if (posRun < position) { - int runStyle = ValueAt(position); + STYLE runStyle = ValueAt(position); run++; starts->InsertPartition(run, position); styles->InsertValue(run, 1, runStyle); @@ -48,12 +50,14 @@ int RunStyles::SplitRun(int position) { return run; } -void RunStyles::RemoveRun(int run) { +template +void RunStyles::RemoveRun(DISTANCE run) { starts->RemovePartition(run); styles->DeleteRange(run, 1); } -void RunStyles::RemoveRunIfEmpty(int run) { +template +void RunStyles::RemoveRunIfEmpty(DISTANCE run) { if ((run < starts->Partitions()) && (starts->Partitions() > 1)) { if (starts->PositionFromPartition(run) == starts->PositionFromPartition(run+1)) { RemoveRun(run); @@ -61,7 +65,8 @@ void RunStyles::RemoveRunIfEmpty(int run) { } } -void RunStyles::RemoveRunIfSameAsPrevious(int run) { +template +void RunStyles::RemoveRunIfSameAsPrevious(DISTANCE run) { if ((run > 0) && (run < starts->Partitions())) { if (styles->ValueAt(run-1) == styles->ValueAt(run)) { RemoveRun(run); @@ -69,30 +74,35 @@ void RunStyles::RemoveRunIfSameAsPrevious(int run) { } } -RunStyles::RunStyles() { - starts.reset(new Partitioning(8)); - styles.reset(new SplitVector()); +template +RunStyles::RunStyles() { + starts.reset(new Partitioning(8)); + styles.reset(new SplitVector