Documentation ¶
Overview ¶
Package rangetree is designed to store n-dimensional data in an easy-to-query way. Given this package's primary use as representing cartesian data, this information is represented by int64s at n-dimensions. This implementation is not actually a tree but a sparse n-dimensional list. This package also includes two implementations of this sparse list, one mutable (and not threadsafe) and another that is immutable copy-on-write which is threadsafe. The mutable version is obviously faster but will likely have write contention for any consumer that needs a threadsafe rangetree.
TODO: unify both implementations with the same interface.
Index ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Entries ¶
type Entries []Entry
Entries is a typed list of Entry that can be reused if Dispose is called.
type Entry ¶
type Entry interface { // ValueAtDimension returns the value of this entry // at the specified dimension. ValueAtDimension(dimension uint64) int64 }
Entry defines items that can be added to the rangetree.
type Interval ¶
type Interval interface { // LowAtDimension returns an integer representing the lower bound // at the requested dimension. LowAtDimension(dimension uint64) int64 // HighAtDimension returns an integer representing the higher bound // at the request dimension. HighAtDimension(dimension uint64) int64 }
Interval describes the methods required to query the rangetree.
type NoEntriesError ¶
type NoEntriesError struct{}
NoEntriesError is returned from an operation that requires existing entries when none are found.
func (NoEntriesError) Error ¶
func (nee NoEntriesError) Error() string
type OutOfDimensionError ¶
type OutOfDimensionError struct {
// contains filtered or unexported fields
}
OutOfDimensionError is returned when a requested operation doesn't meet dimensional requirements.
func (OutOfDimensionError) Error ¶
func (oode OutOfDimensionError) Error() string
type RangeTree ¶
type RangeTree interface { // Add will add the provided entries to the tree. Any entries that // were overwritten will be returned in the order in which they // were overwritten. If an entry's addition does not overwrite, a nil // is returned for that entry's index in the provided cells. Add(entries ...Entry) Entries // Len returns the number of entries in the tree. Len() uint64 // Delete will remove the provided entries from the tree. // Any entries that were deleted will be returned in the order in // which they were deleted. If an entry does not exist to be deleted, // a nil is returned for that entry's index in the provided cells. Delete(entries ...Entry) Entries // Query will return a list of entries that fall within // the provided interval. Query(interval Interval) Entries // Apply will call the provided function with each entry that exists // within the provided range, in order. Return false at any time to // cancel iteration. Altering the entry in such a way that its location // changes will result in undefined behavior. Apply(interval Interval, fn func(Entry) bool) // Get returns any entries that exist at the addresses provided by the // given entries. Entries are returned in the order in which they are // received. If an entry cannot be found, a nil is returned in its // place. Get(entries ...Entry) Entries // InsertAtDimension will increment items at and above the given index // by the number provided. Provide a negative number to to decrement. // Returned are two lists. The first list is a list of entries that // were moved. The second is a list entries that were deleted. These // lists are exclusive. InsertAtDimension(dimension uint64, index, number int64) (Entries, Entries) }
RangeTree describes the methods available to the rangetree.