Skip to content

Incrementing Map Property

Stores items indexed by an auto-incrementing number.

See properties page to see which property types it can contain for value. Property definitions need to be required and values can thus not be null.

  • Kotlin Definition: IncrementingMapDefinition<K, V>
    • K for type of comparable to autoincrement
    • V for type of value definition
  • Kotlin Value: Map
  • Maryk Yaml Definition: IncMap
  • Value
  • required - default true
  • final - default false
  • minSize - default unset. Minimum size of map
  • maxSize - default unset. Maximum size of map
  • keyDefinition - definition of keys contained in map
  • valueDefinition - definition of values contained in map

Example of a Map property definition for use within a Model

val orderNames by incrementingMap(
index = 1u,
required = false,
final = true,
keyNumberDescriptor = UInt32,
valueDefinition = StringDefinition()
)

Example of a separate Map property definition

val def = IncrementingMapDefinition(
required = false,
final = true,
keyNumberDescriptor = UInt32,
valueDefinition = StringDefinition()
)

Maps can be applied with Map operations through IncMapChange to check or change the contents. It can be defined with a map with valuesToAdd or a set of keysToDelete.

Example on a model with a map containing integers mapped to strings:

IncMapChange(
Model { incMap::ref }.change(
addValues = listOf(
"a",
"b"
)
)
)

Depends on the specific implementation. The values are stored in their representative byte representation.

Maps are encoded as multiple entries of tag/value pairs with the tag referring to the index of the map. The wire type is length delimited and the values are 2 tag/value pairs with the first one with tag=1 the key and secondly the value with tag=2.

Map encoding T L Tk Vk Tv Vv T L Tk Vk Tv Vv

  • T is the tag index of the map
  • L is length of encoded key value pair
  • Tk is the tag for key and is 1
  • Vk is the value of the key
  • Tv is the tag for the value which is 2
  • Vv is the encoded value of the value

(The encoded values could be encoded Length delimited and thus also contain lengths of the bytes)