mirror of
https://github.com/dolthub/dolt.git
synced 2026-02-11 10:33:08 -06:00
And same for MakePrimitiveType. This also makes sure that we return the same primitive type every single time. Fixes #1271
48 lines
1.3 KiB
Go
48 lines
1.3 KiB
Go
package types
|
|
|
|
import "github.com/attic-labs/noms/d"
|
|
|
|
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
|
|
elemTypes() []*Type
|
|
}
|
|
|
|
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 = MakeMapType(ValueType, ValueType)
|
|
|
|
func NewMap(kv ...Value) Map {
|
|
return NewTypedMap(mapType, kv...)
|
|
}
|
|
|
|
func NewTypedMap(t *Type, kv ...Value) Map {
|
|
d.Chk.Equal(MapKind, t.Kind(), "Invalid type. Expected: MapKind, found: %s", t.Describe())
|
|
return newTypedMap(t, buildMapData(mapData{}, kv, t)...)
|
|
}
|
|
|
|
func newTypedMap(t *Type, entries ...mapEntry) Map {
|
|
seq := newEmptySequenceChunker(makeMapLeafChunkFn(t, nil), newOrderedMetaSequenceChunkFn(t, nil), newMapLeafBoundaryChecker(), newOrderedMetaSequenceBoundaryChecker)
|
|
|
|
for _, entry := range entries {
|
|
seq.Append(entry)
|
|
}
|
|
|
|
return seq.Done().(Map)
|
|
}
|