Documentation ¶
Index ¶
- type IndexMap
- func (imap *IndexMap[K, V]) AddIndex(indexName string, index *SecondaryIndex[V]) bool
- func (imap *IndexMap[K, V]) Clear()
- func (imap *IndexMap[K, V]) Collect() ([]K, []*V)
- func (imap *IndexMap[K, V]) CollectBy(indexName string) ([]any, [][]*V)
- func (imap *IndexMap[K, V]) CollectKeys() []K
- func (imap *IndexMap[K, V]) CollectValues() []*V
- func (imap *IndexMap[K, V]) CollectValuesOrdered() []*V
- func (imap *IndexMap[K, V]) Contain(key K) booldeprecated
- func (imap *IndexMap[K, V]) Contains(key K) bool
- func (imap *IndexMap[K, V]) Get(key K) *V
- func (imap *IndexMap[K, V]) GetAllBy(indexName string, key any) []*V
- func (imap *IndexMap[K, V]) GetBy(indexName string, key any) *V
- func (imap *IndexMap[K, V]) Insert(values ...*V)
- func (imap *IndexMap[K, V]) Len() int
- func (imap *IndexMap[K, V]) MarshalJSON() ([]byte, error)
- func (imap *IndexMap[K, V]) PrimaryKey(v *V) K
- func (imap *IndexMap[K, V]) Range(fn func(key K, value *V) bool)
- func (imap *IndexMap[K, V]) RangeBy(indexName string, fn func(key any, values []*V) bool)
- func (imap *IndexMap[K, V]) RangeOrdered(fn func(key K, value *V) bool)
- func (imap *IndexMap[K, V]) Remove(keys ...K)
- func (imap *IndexMap[K, V]) RemoveBy(indexName string, keys ...any)
- func (imap *IndexMap[K, V]) SetCmpFn(cmp func(value1, Value2 *V) int)
- func (imap *IndexMap[K, V]) UnmarshalJSON(data []byte) error
- func (imap *IndexMap[K, V]) Update(key K, updateFn UpdateFn[V]) *V
- func (imap *IndexMap[K, V]) UpdateBy(indexName string, key any, updateFn UpdateFn[V])
- type PrimaryIndex
- type SecondaryIndex
- type Set
- type UpdateFn
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type IndexMap ¶
type IndexMap[K comparable, V any] struct { // contains filtered or unexported fields }
IndexMap is a map supports seeking data with more indexes. Serializing a IndexMap as JSON results in the same as serializing a map, the result doesn't contain the index information, only data. NOTE: DO NOT insert nil value into the IndexMap
func NewIndexMap ¶
func NewIndexMap[K comparable, V any](primaryIndex *PrimaryIndex[K, V]) *IndexMap[K, V]
Create a IndexMap with a primary index, the primary index must be a one-to-one mapping.
func (*IndexMap[K, V]) AddIndex ¶
func (imap *IndexMap[K, V]) AddIndex(indexName string, index *SecondaryIndex[V]) bool
Add a secondary index, build index for the data inserted, the return value indicates whether succeed to add index, false if the indexName existed.
func (*IndexMap[K, V]) Collect ¶
func (imap *IndexMap[K, V]) Collect() ([]K, []*V)
Collect returns all the keys and values.
func (*IndexMap[K, V]) CollectBy ¶ added in v1.2.0
CollectBy returns all the keys and values as indexed by indexName.
func (*IndexMap[K, V]) CollectKeys ¶ added in v1.2.1
func (imap *IndexMap[K, V]) CollectKeys() []K
Collect returns all the keys and values.
func (*IndexMap[K, V]) CollectValues ¶ added in v1.2.1
func (imap *IndexMap[K, V]) CollectValues() []*V
Collect returns all the keys and values.
func (*IndexMap[K, V]) CollectValuesOrdered ¶ added in v1.2.1
func (imap *IndexMap[K, V]) CollectValuesOrdered() []*V
Collect returns all the keys and values.
func (*IndexMap[K, V]) Contains ¶ added in v1.2.1
Return true if the value with given key exists, false otherwise.
func (*IndexMap[K, V]) Get ¶
func (imap *IndexMap[K, V]) Get(key K) *V
Get value by the primary key, nil if key not exists.
func (*IndexMap[K, V]) GetAllBy ¶
Return all values the seeked by the key, nil if index or key not exists.
func (*IndexMap[K, V]) GetBy ¶
Return one of the values for the given secondary key, No guarantee for which one is returned if more than one elements indexed by the key.
func (*IndexMap[K, V]) Insert ¶
func (imap *IndexMap[K, V]) Insert(values ...*V)
Insert values into the map, also updates the indexes added, overwrite if a value with the same primary key existed. NOTE: insert an modified existed value with the same address may confuse the index, use Update() to do this.
func (*IndexMap[K, V]) MarshalJSON ¶
func (*IndexMap[K, V]) PrimaryKey ¶ added in v1.2.0
func (imap *IndexMap[K, V]) PrimaryKey(v *V) K
PrimaryKey calculates the primary key of given value as defined by the IndexMap's PrimaryIndex
func (*IndexMap[K, V]) Range ¶
Range iterates over all the elements, stops iteration if fn returns false, no any guarantee to the order. don't use modifying calls to this indexmap while the Range is running that may cause dead locks.
func (*IndexMap[K, V]) RangeBy ¶ added in v1.2.0
RangeBy iterates over the map by a given index fn must not attempt modifying the IndexMap, or else it will deadlock
func (*IndexMap[K, V]) RangeOrdered ¶ added in v1.2.1
Range iterates over all the elements, stops iteration if fn returns false, guarantee to the order if OrderedFn was set before. don't use modifying calls to this indexmap while the Range is running that may cause dead locks.
func (*IndexMap[K, V]) Remove ¶
func (imap *IndexMap[K, V]) Remove(keys ...K)
Remove values into the map, also updates the indexes added.
func (*IndexMap[K, V]) SetCmpFn ¶ added in v1.2.1
SetCmpFn, defines it it is not nil the compare function which is use to sort the the result of the calls to
- RangeOrdered
- CollectValuesOrdered
SortFunc sorts the slice x in ascending order as determined by the cmp function. This sort is not guaranteed to be stable. cmp(a, b) should return a negative number when a < b, a positive number when a > b and zero when a == b.
func (*IndexMap[K, V]) UnmarshalJSON ¶
func (*IndexMap[K, V]) Update ¶
Update the value for the given key, it removes the old one if exists, and inserts updateFn(old) if modified and not nil.
type PrimaryIndex ¶
type PrimaryIndex[K comparable, V any] struct { // contains filtered or unexported fields }
func NewPrimaryIndex ¶
func NewPrimaryIndex[K comparable, V any](extractField func(value *V) K) *PrimaryIndex[K, V]
Create an primary index, the extractField func must guarantee it makes the index one-to-one.
type SecondaryIndex ¶
type SecondaryIndex[V any] struct { // contains filtered or unexported fields }
func NewSecondaryIndex ¶
func NewSecondaryIndex[V any](extractField func(value *V) []any) *SecondaryIndex[V]
Create a secondary index, the extractField func returns the keys for seeking the value, It's OK that the same key seeks more than one values.
type Set ¶
type Set[T comparable] map[T]struct{}