Files
dolt/types/map.go

46 lines
1.3 KiB
Go

package types
import "github.com/attic-labs/noms/chunks"
type Map interface {
Value
First() (Value, Value)
Len() uint64
Empty() bool
Has(key Value) bool
Get(key Value) Value
MaybeGet(key Value) (v Value, ok bool)
Set(key Value, val Value) Map
SetM(kv ...Value) Map
Remove(k Value) Map
Iter(cb mapIterCallback)
IterAll(cb mapIterAllCallback)
IterAllP(concurrency int, f mapIterAllCallback)
Filter(cb mapFilterCallback) Map
}
type indexOfMapFn func(m mapData, v Value) int
type mapIterCallback func(key, value Value) (stop bool)
type mapIterAllCallback func(key, value Value)
type mapFilterCallback func(key, value Value) (keep bool)
var mapType = MakeCompoundType(MapKind, MakePrimitiveType(ValueKind), MakePrimitiveType(ValueKind))
func NewMap(cs chunks.ChunkStore, kv ...Value) Map {
return NewTypedMap(cs, mapType, kv...)
}
func NewTypedMap(cs chunks.ChunkStore, t Type, kv ...Value) Map {
return newTypedMap(cs, t, buildMapData(mapData{}, kv, t)...)
}
func newTypedMap(cs chunks.ChunkStore, t Type, entries ...mapEntry) Map {
seq := newEmptySequenceChunker(makeMapLeafChunkFn(t, cs), newMapMetaSequenceChunkFn(t, cs), newMapLeafBoundaryChecker(), newOrderedMetaSequenceBoundaryChecker)
for _, entry := range entries {
seq.Append(entry)
}
return seq.Done().(Map)
}