SubtrieIterators also needs to return bases

This commit is contained in:
Roy Crihfield 2023-09-27 17:10:07 +08:00
parent ff1e1a4ea7
commit 241c059a67
2 changed files with 4 additions and 4 deletions

View File

@ -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
}

View File

@ -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++ {