This commit is contained in:
jdl
2023-12-03 19:57:26 +01:00
parent 5528c264d3
commit 6da018353a
4 changed files with 12 additions and 191 deletions

View File

@@ -139,59 +139,6 @@ func (i *Index[T]) DescendAfter(tx *Snapshot, after *T, each func(*T) bool) {
})
}
type ListArgs[T any] struct {
Desc bool // True for descending order, otherwise ascending.
After *T // If after is given, iterate after (and including) the value.
While func(*T) bool // Continue iterating until While is false.
Limit int // Maximum number of items to return. 0 => All.
}
func (i *Index[T]) List(tx *Snapshot, args *ListArgs[T], out []*T) []*T {
tx = i.ensureSnapshot(tx)
if args == nil {
args = &ListArgs[T]{}
}
if args.Limit < 0 {
return nil
}
if args.While == nil {
args.While = func(*T) bool { return true }
}
size := args.Limit
if size == 0 {
size = 32 // Why not?
}
items := out[:0]
each := func(item *T) bool {
if !args.While(item) {
return false
}
items = append(items, item)
return args.Limit == 0 || len(items) < args.Limit
}
if args.Desc {
if args.After != nil {
i.DescendAfter(tx, args.After, each)
} else {
i.Descend(tx, each)
}
} else {
if args.After != nil {
i.AscendAfter(tx, args.After, each)
} else {
i.Ascend(tx, each)
}
}
return items
}
func (i *Index[T]) Count(tx *Snapshot) int {
tx = i.ensureSnapshot(tx)
return i.btree(tx).Len()