From c3b5b255ad25db3141749bc15e6cbfa3f5bc71ef Mon Sep 17 00:00:00 2001 From: Edgaru089 Date: Fri, 8 Aug 2025 14:19:31 +0800 Subject: [PATCH] add iterators for tree --- tree_iter.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 tree_iter.go diff --git a/tree_iter.go b/tree_iter.go new file mode 100644 index 0000000..094badb --- /dev/null +++ b/tree_iter.go @@ -0,0 +1,33 @@ +package stl + +import "iter" + +func (t *Tree[K, V, C]) Keys() iter.Seq[K] { + return func(yield func(K) bool) { + for cur := t.FirstNode(); cur != nil; cur = cur.Next() { + if !yield(cur.key) { + return + } + } + } +} + +func (t *Tree[K, V, C]) Values() iter.Seq[V] { + return func(yield func(V) bool) { + for cur := t.FirstNode(); cur != nil; cur = cur.Next() { + if !yield(cur.Value) { + return + } + } + } +} + +func (t *Tree[K, V, C]) All() iter.Seq2[K, V] { + return func(yield func(K, V) bool) { + for cur := t.FirstNode(); cur != nil; cur = cur.Next() { + if !yield(cur.key, cur.Value) { + return + } + } + } +}