Skip to content

Commit d6d904e

Browse files
committed
improve prependTreeNode
1 parent 81d10a6 commit d6d904e

File tree

2 files changed

+11
-42
lines changed

2 files changed

+11
-42
lines changed

pkg/storage/tree/tree.go

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -81,31 +81,17 @@ func (t *Tree) Merge(srcTrieI merge.Merger) {
8181

8282
for _, srcChildNode := range st.ChildrenNodes {
8383
dstChildNode := dt.insert(srcChildNode.Name)
84-
srcNodes = prepend(srcNodes, srcChildNode)
85-
dstNodes = prepend(dstNodes, dstChildNode)
84+
srcNodes = prependTreeNode(srcNodes, srcChildNode)
85+
dstNodes = prependTreeNode(dstNodes, dstChildNode)
8686
}
8787
}
8888
}
8989

90-
func prepend(s []*treeNode, x *treeNode) []*treeNode {
91-
if len(s) != 0 && s[0] == x {
92-
return s
93-
}
94-
prev := x
95-
for i, elem := range s {
96-
switch {
97-
case i == 0:
98-
s[0] = x
99-
prev = elem
100-
case elem == x:
101-
s[i] = prev
102-
return s
103-
default:
104-
s[i] = prev
105-
prev = elem
106-
}
107-
}
108-
return append(s, prev)
90+
func prependTreeNode(s []*treeNode, x *treeNode) []*treeNode {
91+
s = append(s, nil)
92+
copy(s[1:], s)
93+
s[0] = x
94+
return s
10995
}
11096

11197
func prependBytes(s [][]byte, x []byte) [][]byte {

pkg/storage/tree/tree_test.go

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -110,34 +110,17 @@ func treeStr(s string) string {
110110
}
111111

112112
var _ = Describe("prepend", func() {
113-
Context("prepend (treeNode)", func() {
114-
A, B, C, X := &treeNode{}, &treeNode{}, &treeNode{}, &treeNode{}
115-
116-
It("prepend to slice with single elem", func() {
117-
s := []*treeNode{A}
118-
s = prepend(s, A)
119-
Expect(s).To(HaveLen(1))
120-
Expect(s[0]).To(Equal(A))
121-
})
122-
123-
It("prepend slice with new elem", func() {
113+
Context("prependTreeNode)", func() {
114+
It("prepend elem", func() {
115+
A, B, C, X := &treeNode{}, &treeNode{}, &treeNode{}, &treeNode{}
124116
s := []*treeNode{A, B, C}
125-
s = prepend(s, X)
117+
s = prependTreeNode(s, X)
126118
Expect(s).To(HaveLen(4))
127119
Expect(s[0]).To(Equal(X))
128120
Expect(s[1]).To(Equal(A))
129121
Expect(s[2]).To(Equal(B))
130122
Expect(s[3]).To(Equal(C))
131123
})
132-
133-
It("prepend slice with existing elem", func() {
134-
s := []*treeNode{A, B, C}
135-
s = prepend(s, B)
136-
Expect(s).To(HaveLen(3))
137-
Expect(s[0]).To(Equal(B))
138-
Expect(s[1]).To(Equal(A))
139-
Expect(s[2]).To(Equal(C))
140-
})
141124
})
142125
Context("prependBytes", func() {
143126
It("prepend elem", func() {

0 commit comments

Comments
 (0)