summaryrefslogtreecommitdiff
path: root/pkg/rbtree/rbtree.go
diff options
context:
space:
mode:
authorLuke Shumaker <lukeshu@lukeshu.com>2022-06-30 03:14:05 -0600
committerLuke Shumaker <lukeshu@lukeshu.com>2022-06-30 03:31:43 -0600
commit27d2f3a0efe6de94c7720907557e640e8a2f1428 (patch)
tree5cf5fd8f3ca247198fdb978b017c9c72ab581f27 /pkg/rbtree/rbtree.go
parent428d86a1816d13ea6969793a42893c739487cf3d (diff)
btrfsvol: use rbtree
Diffstat (limited to 'pkg/rbtree/rbtree.go')
-rw-r--r--pkg/rbtree/rbtree.go21
1 files changed, 14 insertions, 7 deletions
diff --git a/pkg/rbtree/rbtree.go b/pkg/rbtree/rbtree.go
index 13d9602..7927307 100644
--- a/pkg/rbtree/rbtree.go
+++ b/pkg/rbtree/rbtree.go
@@ -33,17 +33,24 @@ type Tree[K constraints.Ordered, V any] struct {
root *Node[V]
}
-func (t *Tree[K, V]) Walk(fn func(*Node[V])) {
- t.root.walk(fn)
+func (t *Tree[K, V]) Walk(fn func(*Node[V]) error) error {
+ return t.root.walk(fn)
}
-func (node *Node[V]) walk(fn func(*Node[V])) {
+func (node *Node[V]) walk(fn func(*Node[V]) error) error {
if node == nil {
- return
+ return nil
+ }
+ if err := node.Left.walk(fn); err != nil {
+ return err
+ }
+ if err := fn(node); err != nil {
+ return err
+ }
+ if err := node.Right.walk(fn); err != nil {
+ return err
}
- node.Left.walk(fn)
- fn(node)
- node.Right.walk(fn)
+ return nil
}
// Search the tree for a value that satisfied the given callbackk