Skip to content

Commit 8f68881

Browse files
Made ordered.delete return the deleted node.
1 parent 28a0e06 commit 8f68881

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

rangetree/ordered.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -56,24 +56,26 @@ func (nodes *orderedNodes) add(node *node) *node {
5656
return nodes.addAt(i, node)
5757
}
5858

59-
func (nodes *orderedNodes) deleteAt(i int) {
59+
func (nodes *orderedNodes) deleteAt(i int) *node {
6060
if i >= len(*nodes) { // no matching found
61-
return
61+
return nil
6262
}
6363

64+
deleted := (*nodes)[i]
6465
copy((*nodes)[i:], (*nodes)[i+1:])
6566
(*nodes)[len(*nodes)-1] = nil
6667
*nodes = (*nodes)[:len(*nodes)-1]
68+
return deleted
6769
}
6870

69-
func (nodes *orderedNodes) delete(value int64) {
71+
func (nodes *orderedNodes) delete(value int64) *node {
7072
i := nodes.search(value)
7173

7274
if (*nodes)[i].value != value || i == len(*nodes) {
73-
return
75+
return nil
7476
}
7577

76-
nodes.deleteAt(i)
78+
return nodes.deleteAt(i)
7779
}
7880

7981
func (nodes orderedNodes) apply(low, high int64, fn func(*node) bool) bool {

rangetree/ordered_test.go

Lines changed: 23 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,20 @@ func TestOrderedAdd(t *testing.T) {
2828
n1 := newNode(4, constructMockEntry(1, 4), false)
2929
n2 := newNode(1, constructMockEntry(2, 1), false)
3030

31-
nodes.add(n1)
32-
nodes.add(n2)
31+
overwritten := nodes.add(n1)
32+
assert.Nil(t, overwritten)
33+
34+
overwritten = nodes.add(n2)
35+
assert.Nil(t, overwritten)
3336

3437
assert.Equal(t, orderedNodes{n2, n1}, nodes)
38+
39+
n3 := newNode(4, constructMockEntry(1, 4), false)
40+
41+
overwritten = nodes.add(n3)
42+
43+
assert.True(t, n1 == overwritten)
44+
assert.Equal(t, orderedNodes{n2, n3}, nodes)
3545
}
3646

3747
func TestOrderedDelete(t *testing.T) {
@@ -43,13 +53,21 @@ func TestOrderedDelete(t *testing.T) {
4353
nodes.add(n1)
4454
nodes.add(n2)
4555

46-
nodes.delete(n2.value)
56+
deleted := nodes.delete(n2.value)
57+
58+
assert.Equal(t, orderedNodes{n1}, nodes)
59+
assert.Equal(t, n2, deleted)
60+
61+
missingValue := int64(3)
62+
deleted = nodes.delete(missingValue)
4763

4864
assert.Equal(t, orderedNodes{n1}, nodes)
65+
assert.Nil(t, deleted)
4966

50-
nodes.delete(n1.value)
67+
deleted = nodes.delete(n1.value)
5168

52-
assert.Len(t, nodes, 0)
69+
assert.Empty(t, nodes)
70+
assert.Equal(t, n1, deleted)
5371
}
5472

5573
func TestApply(t *testing.T) {

0 commit comments

Comments
 (0)