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]) Contain(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]) Range(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]) UnmarshalJSON(data []byte) error
- func (imap *IndexMap[K, V]) Update(key K, updateFn UpdateFn[V])
- func (imap *IndexMap[K, V]) UpdateBy(indexName string, key any, updateFn UpdateFn[V])
- type PrimaryIndex
- type SecondaryIndex
- 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]) Clear ¶ added in v1.0.0
func (imap *IndexMap[K, V]) Clear()
Remove all values.
func (*IndexMap[K, V]) Collect ¶ added in v0.2.0
func (imap *IndexMap[K, V]) Collect() ([]K, []*V)
Return all the keys and values.
func (*IndexMap[K, V]) Contain ¶ added in v0.3.0
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 ¶ added in v0.2.0
func (*IndexMap[K, V]) Range ¶ added in v0.2.0
Iterate all the elements, stop iteration if fn returns false, no any guarantee to the order.
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]) RemoveBy ¶ added in v0.3.0
Remove values into the map, also updates the indexes added.
func (*IndexMap[K, V]) UnmarshalJSON ¶ added in v0.2.0
func (*IndexMap[K, V]) Update ¶ added in v0.3.0
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.