diff options
author | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-30 03:14:05 -0600 |
---|---|---|
committer | Luke Shumaker <lukeshu@lukeshu.com> | 2022-06-30 03:31:43 -0600 |
commit | 27d2f3a0efe6de94c7720907557e640e8a2f1428 (patch) | |
tree | 5cf5fd8f3ca247198fdb978b017c9c72ab581f27 /pkg/rbtree/rbtree.go | |
parent | 428d86a1816d13ea6969793a42893c739487cf3d (diff) |
btrfsvol: use rbtree
Diffstat (limited to 'pkg/rbtree/rbtree.go')
-rw-r--r-- | pkg/rbtree/rbtree.go | 21 |
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 |