diff options
author | Neil <nyamatongwe@gmail.com> | 2019-12-01 19:53:48 +1100 |
---|---|---|
committer | Neil <nyamatongwe@gmail.com> | 2019-12-01 19:53:48 +1100 |
commit | 1e5534dde930d2b7eb2580f2c459d1553f3a5971 (patch) | |
tree | 23dff96fa1a4b856388ce42f420ed4a9797b7108 /src/SparseVector.h | |
parent | 7daa6e47979594525c3dd82bb1afce44ac28b246 (diff) | |
download | scintilla-mirror-1e5534dde930d2b7eb2580f2c459d1553f3a5971.tar.gz |
Fix a bug with deleting the first element in SparseVector that left an extra
empty partition.
Add extra checking to Partitioning and turn on checking for UnitTester.
Diffstat (limited to 'src/SparseVector.h')
-rw-r--r-- | src/SparseVector.h | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/src/SparseVector.h b/src/SparseVector.h index 2d3e9cfae..97e35d342 100644 --- a/src/SparseVector.h +++ b/src/SparseVector.h @@ -120,6 +120,14 @@ public: if (startPartition == position) { if (partition == 0) { ClearValue(0); + if (starts->PositionFromPartition(1) == 1) { + // Removing all space of first partition, so remove next partition + // and move value if not last + if (Elements() > 1) { + starts->RemovePartition(partition + 1); + values->Delete(partition); + } + } } else if (partition == starts->Partitions()) { // This should not be possible ClearValue(partition); @@ -133,14 +141,11 @@ public: } } starts->InsertText(partition, -1); + Check(); } void Check() const { - if (Length() < 0) { - throw std::runtime_error("SparseVector: Length can not be negative."); - } - if (starts->Partitions() < 1) { - throw std::runtime_error("SparseVector: Must always have 1 or more partitions."); - } +#ifdef CHECK_CORRECTNESS + starts->Check(); if (starts->Partitions() != values->Length() - 1) { throw std::runtime_error("SparseVector: Partitions and values different lengths."); } @@ -148,6 +153,7 @@ public: if (values->ValueAt(values->Length() - 1) != T()) { throw std::runtime_error("SparseVector: Unused style at end changed."); } +#endif } }; |