aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/PerLine.cxx8
-rw-r--r--src/PerLine.h2
-rw-r--r--test/simpleTests.py10
3 files changed, 16 insertions, 4 deletions
diff --git a/src/PerLine.cxx b/src/PerLine.cxx
index 0bdb60254..a2225dbb6 100644
--- a/src/PerLine.cxx
+++ b/src/PerLine.cxx
@@ -99,7 +99,7 @@ void MarkerHandleSet::RemoveHandle(int handle) {
}
}
-bool MarkerHandleSet::RemoveNumber(int markerNum) {
+bool MarkerHandleSet::RemoveNumber(int markerNum, bool all) {
bool performedDeletion = false;
MarkerHandleNumber **pmhn = &root;
while (*pmhn) {
@@ -108,6 +108,8 @@ bool MarkerHandleSet::RemoveNumber(int markerNum) {
*pmhn = mhn->next;
delete mhn;
performedDeletion = true;
+ if (!all)
+ break;
} else {
pmhn = &((*pmhn)->next);
}
@@ -223,10 +225,10 @@ bool LineMarkers::DeleteMark(int line, int markerNum, bool all) {
delete markers[line];
markers[line] = NULL;
} else {
- bool performedDeletion = markers[line]->RemoveNumber(markerNum);
+ bool performedDeletion = markers[line]->RemoveNumber(markerNum, all);
someChanges = someChanges || performedDeletion;
while (all && performedDeletion) {
- performedDeletion = markers[line]->RemoveNumber(markerNum);
+ performedDeletion = markers[line]->RemoveNumber(markerNum, all);
someChanges = someChanges || performedDeletion;
}
if (markers[line]->Length() == 0) {
diff --git a/src/PerLine.h b/src/PerLine.h
index b43c52bb8..50ce1e551 100644
--- a/src/PerLine.h
+++ b/src/PerLine.h
@@ -37,7 +37,7 @@ public:
bool Contains(int handle) const;
bool InsertHandle(int handle, int markerNum);
void RemoveHandle(int handle);
- bool RemoveNumber(int markerNum);
+ bool RemoveNumber(int markerNum, bool all);
void CombineWith(MarkerHandleSet *other);
};
diff --git a/test/simpleTests.py b/test/simpleTests.py
index d8abbb651..c8a111044 100644
--- a/test/simpleTests.py
+++ b/test/simpleTests.py
@@ -651,6 +651,16 @@ class TestMarkers(unittest.TestCase):
self.ed.MarkerDelete(1,1)
self.assertEquals(self.ed.MarkerLineFromHandle(handle), -1)
+ def testTwiceAddedDelete(self):
+ handle = self.ed.MarkerAdd(1,1)
+ self.assertEquals(self.ed.MarkerGet(1), 2)
+ handle2 = self.ed.MarkerAdd(1,1)
+ self.assertEquals(self.ed.MarkerGet(1), 2)
+ self.ed.MarkerDelete(1,1)
+ self.assertEquals(self.ed.MarkerGet(1), 2)
+ self.ed.MarkerDelete(1,1)
+ self.assertEquals(self.ed.MarkerGet(1), 0)
+
def testMarkerDeleteAll(self):
h1 = self.ed.MarkerAdd(0,1)
h2 = self.ed.MarkerAdd(1,2)