const (
DefaultFreeListSize = 32
)
type BTree struct {
// contains filtered or unexported fields
}
BTree is an implementation of a B-Tree.
BTree stores Item instances in an ordered structure, allowing easy insertion, removal, and iteration.
Write operations are not safe for concurrent mutation by multiple goroutines, but Read operations are.
▹ Example
func New(degree int) *BTree
New creates a new B-Tree with the given degree.
New(2), for example, will create a 2-3-4 tree (each node contains 1-3 items and 2-4 children).
func NewWithFreeList(degree int, f *FreeList) *BTree
NewWithFreeList creates a new B-Tree that uses the given node free list.
func (t *BTree) Ascend(iterator ItemIterator)
Ascend calls the iterator for every value in the tree within the range [first, last], until iterator returns false.
func (t *BTree) AscendGreaterOrEqual(pivot Item, iterator ItemIterator)
AscendGreaterOrEqual calls the iterator for every value in the tree within the range [pivot, last], until iterator returns false.
func (t *BTree) AscendLessThan(pivot Item, iterator ItemIterator)
AscendLessThan calls the iterator for every value in the tree within the range [first, pivot), until iterator returns false.
func (t *BTree) AscendRange(greaterOrEqual, lessThan Item, iterator ItemIterator)
AscendRange calls the iterator for every value in the tree within the range [greaterOrEqual, lessThan), until iterator returns false.
func (t *BTree) Delete(item Item) Item
Delete removes an item equal to the passed in item from the tree, returning it. If no such item exists, returns nil.
func (t *BTree) DeleteMax() Item
DeleteMax removes the largest item in the tree and returns it. If no such item exists, returns nil.
func (t *BTree) DeleteMin() Item
DeleteMin removes the smallest item in the tree and returns it. If no such item exists, returns nil.
func (t *BTree) Descend(iterator ItemIterator)
Descend calls the iterator for every value in the tree within the range [last, first], until iterator returns false.
func (t *BTree) DescendGreaterThan(pivot Item, iterator ItemIterator)
DescendGreaterThan calls the iterator for every value in the tree within the range (pivot, last], until iterator returns false.
func (t *BTree) DescendLessOrEqual(pivot Item, iterator ItemIterator)
DescendLessOrEqual calls the iterator for every value in the tree within the range [pivot, first], until iterator returns false.
func (t *BTree) DescendRange(lessOrEqual, greaterThan Item, iterator ItemIterator)
DescendRange calls the iterator for every value in the tree within the range [lessOrEqual, greaterThan), until iterator returns false.
func (t *BTree) Get(key Item) Item
Get looks for the key item in the tree, returning it. It returns nil if unable to find that item.
func (t *BTree) Has(key Item) bool
Has returns true if the given key is in the tree.
func (t *BTree) Len() int
Len returns the number of items currently in the tree.
func (t *BTree) Max() Item
Max returns the largest item in the tree, or nil if the tree is empty.
func (t *BTree) Min() Item
Min returns the smallest item in the tree, or nil if the tree is empty.
func (t *BTree) ReplaceOrInsert(item Item) Item
ReplaceOrInsert adds the given item to the tree. If an item in the tree already equals the given one, it is removed from the tree and returned. Otherwise, nil is returned.
nil cannot be added to the tree (will panic).
type FreeList struct {
// contains filtered or unexported fields
}
FreeList represents a free list of btree nodes. By default each BTree has its own FreeList, but multiple BTrees can share the same FreeList. Two Btrees using the same freelist are not safe for concurrent write access.
func NewFreeList(size int) *FreeList
NewFreeList creates a new free list. size is the maximum size of the returned free list.
type Int int
Int implements the Item interface for integers.
func (a Int) Less(b Item) bool
Less returns true if int(a) < int(b).
type Item interface { // Less tests whether the current item is less than the given argument. // // This must provide a strict weak ordering. // If !a.Less(b) && !b.Less(a), we treat this to mean a == b (i.e. we can only // hold one of either a or b in the tree). Less(than Item) bool }
Item represents a single object in the tree.
type ItemIterator func(i Item) bool
ItemIterator allows callers of Ascend* to iterate in-order over portions of the tree. When this function returns false, iteration will stop and the associated Ascend* function will immediately return.