From cb3ef02e9c483596f3c146bc72325457e61d0b19 Mon Sep 17 00:00:00 2001 From: Neil Date: Fri, 29 Jul 2022 10:16:34 +1000 Subject: Flatten Partitioning and RunStyles to avoid a level of indirection by containing SplitVector and Partitioning directly instead of using std::unique_ptr. This will enable more value semantics and reduces potential memory allocation failure scenarios. --- src/RunStyles.cxx | 110 +++++++++++++++++++++++++++--------------------------- 1 file changed, 55 insertions(+), 55 deletions(-) (limited to 'src/RunStyles.cxx') diff --git a/src/RunStyles.cxx b/src/RunStyles.cxx index 6d43e6085..37c76f921 100644 --- a/src/RunStyles.cxx +++ b/src/RunStyles.cxx @@ -31,9 +31,9 @@ using namespace Scintilla::Internal; // Find the first run at a position template DISTANCE RunStyles::RunFromPosition(DISTANCE position) const noexcept { - DISTANCE run = starts->PartitionFromPosition(position); + DISTANCE run = starts.PartitionFromPosition(position); // Go to first element with this position - while ((run > 0) && (position == starts->PositionFromPartition(run-1))) { + while ((run > 0) && (position == starts.PositionFromPartition(run-1))) { run--; } return run; @@ -43,26 +43,26 @@ DISTANCE RunStyles::RunFromPosition(DISTANCE position) const no template DISTANCE RunStyles::SplitRun(DISTANCE position) { DISTANCE run = RunFromPosition(position); - const DISTANCE posRun = starts->PositionFromPartition(run); + const DISTANCE posRun = starts.PositionFromPartition(run); if (posRun < position) { STYLE runStyle = ValueAt(position); run++; - starts->InsertPartition(run, position); - styles->InsertValue(run, 1, runStyle); + starts.InsertPartition(run, position); + styles.InsertValue(run, 1, runStyle); } return run; } template void RunStyles::RemoveRun(DISTANCE run) { - starts->RemovePartition(run); - styles->DeleteRange(run, 1); + starts.RemovePartition(run); + styles.DeleteRange(run, 1); } template void RunStyles::RemoveRunIfEmpty(DISTANCE run) { - if ((run < starts->Partitions()) && (starts->Partitions() > 1)) { - if (starts->PositionFromPartition(run) == starts->PositionFromPartition(run+1)) { + if ((run < starts.Partitions()) && (starts.Partitions() > 1)) { + if (starts.PositionFromPartition(run) == starts.PositionFromPartition(run+1)) { RemoveRun(run); } } @@ -70,9 +70,9 @@ void RunStyles::RemoveRunIfEmpty(DISTANCE run) { template void RunStyles::RemoveRunIfSameAsPrevious(DISTANCE run) { - if ((run > 0) && (run < starts->Partitions())) { + if ((run > 0) && (run < starts.Partitions())) { const DISTANCE runBefore = run - 1; - if (styles->ValueAt(runBefore) == styles->ValueAt(run)) { + if (styles.ValueAt(runBefore) == styles.ValueAt(run)) { RemoveRun(run); } } @@ -80,9 +80,9 @@ void RunStyles::RemoveRunIfSameAsPrevious(DISTANCE run) { template RunStyles::RunStyles() { - starts = std::make_unique>(8); - styles = std::make_unique>(); - styles->InsertValue(0, 2, 0); + starts = Partitioning(8); + styles = SplitVector