mirror of
https://github.com/Mrs4s/go-cqhttp.git
synced 2025-05-07 12:43:31 +08:00
fix: fix btree iterate
This commit is contained in:
parent
d2a58014bc
commit
6c7445772c
@ -526,6 +526,7 @@ func (d *DB) Delete(hash *byte) error {
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Foreach iterates over all items in the database file.
|
||||||
func (d *DB) Foreach(iter func(key [16]byte, value []byte)) {
|
func (d *DB) Foreach(iter func(key [16]byte, value []byte)) {
|
||||||
top := d.get(d.top)
|
top := d.get(d.top)
|
||||||
d.iterate(top, iter)
|
d.iterate(top, iter)
|
||||||
@ -542,4 +543,9 @@ func (d *DB) iterate(table *table, iter func(key [16]byte, value []byte)) {
|
|||||||
d.iterate(child, iter)
|
d.iterate(child, iter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
item := table.items[table.size]
|
||||||
|
if item.child != 0 {
|
||||||
|
child := d.get(item.child)
|
||||||
|
d.iterate(child, iter)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/Mrs4s/MiraiGo/utils"
|
||||||
assert2 "github.com/stretchr/testify/assert"
|
assert2 "github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -65,3 +66,27 @@ func TestBtree(t *testing.T) {
|
|||||||
|
|
||||||
assert2.NoError(t, bt.Close())
|
assert2.NoError(t, bt.Close())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestDB_Foreach(t *testing.T) {
|
||||||
|
const elemSize = 100
|
||||||
|
set := make([]string, elemSize)
|
||||||
|
for i := 0; i < elemSize; i++ {
|
||||||
|
set[i] = utils.RandomString(20)
|
||||||
|
}
|
||||||
|
f := tempfile(t)
|
||||||
|
defer os.Remove(f)
|
||||||
|
bt, err := Create(f)
|
||||||
|
defer bt.Close()
|
||||||
|
assert2.NoError(t, err)
|
||||||
|
for _, v := range set {
|
||||||
|
hash := sha1.New()
|
||||||
|
hash.Write([]byte(v))
|
||||||
|
bt.Insert(&hash.Sum(nil)[0], []byte(v))
|
||||||
|
}
|
||||||
|
|
||||||
|
var ss []string
|
||||||
|
bt.Foreach(func(key [16]byte, value []byte) {
|
||||||
|
ss = append(ss, string(value))
|
||||||
|
})
|
||||||
|
assert2.ElementsMatch(t, set, ss)
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user