diff --git a/iterator.go b/iterator.go index fb093fd..217b4c4 100644 --- a/iterator.go +++ b/iterator.go @@ -140,11 +140,11 @@ func eachPrefixRange(prefix []byte, nbins uint, callback func([]byte, []byte)) { } // SubtrieIterators cuts a trie by path prefix, returning `nbins` iterators covering its subtries -func SubtrieIterators(makeIterator IteratorConstructor, nbins uint) []trie.NodeIterator { - var iters []trie.NodeIterator +func SubtrieIterators(makeIterator IteratorConstructor, nbins uint) (iters, bases []trie.NodeIterator) { eachPrefixRange(nil, nbins, func(from []byte, to []byte) { it := makeIterator(HexToKeyBytes(from)) + bases = append(bases, it) iters = append(iters, NewPrefixBoundIterator(it, to)) }) - return iters + return iters, bases } diff --git a/iterator_test.go b/iterator_test.go index 882a145..fb3fa63 100644 --- a/iterator_test.go +++ b/iterator_test.go @@ -57,7 +57,7 @@ func TestIterator(t *testing.T) { allPaths := internal.FixtureNodePaths cases := []uint{1, 2, 4, 8, 16, 32} runCase := func(t *testing.T, nbins uint) { - iters := iter.SubtrieIterators(tree.NodeIterator, nbins) + iters, _ := iter.SubtrieIterators(tree.NodeIterator, nbins) ix := 0 for b := uint(0); b < nbins; b++ { for it := iters[b]; it.Next(true); ix++ {