Cleanup
This commit is contained in:
53
mdb/index.go
53
mdb/index.go
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user