aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/SparseVector.h
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2019-12-01 19:53:48 +1100
committerNeil <nyamatongwe@gmail.com>2019-12-01 19:53:48 +1100
commit1e5534dde930d2b7eb2580f2c459d1553f3a5971 (patch)
tree23dff96fa1a4b856388ce42f420ed4a9797b7108 /src/SparseVector.h
parent7daa6e47979594525c3dd82bb1afce44ac28b246 (diff)
downloadscintilla-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.h18
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
}
};