psMap -- a partially sorted map
psMap is a persistent map from an ordered key PK to a value V. This map is
generally well-behaved with respect to cumulative and average performance.
The keys and values are stored in arrays consisting of sorted sub-arrays,
with sub-arrays corresponding to the 1-bits in the binary representation
of the size.
This results in cumulative memory usage in O(size log² size), worst-case
lookup time in O(log² size) and average addition time in O(1) and worst-case
addition time in O(size log² size).
WARNING: Due to the high worst-case time for addition, this structure should
not be used in situations when adding a single element repeatedly to the same
instance of psMap is performance critical. If the resulting map's size n is a
power of 2, this will trigger the worst-case addition time resutling in
O(m*n log² n) for adding an element m times.
This constructor is for internal use only, to create instance of psMap, use
psMap PK V without arguments.
add mapping from kv.values.0 to kv.values.1
Adding has a cumulative average runtime in O(log size) and a worst-case
runtime of O(size)
find the value k is mapped to or nil if k is not part of this map
redefines map.index [ ]:
get the value k is mapped to, or nil if none.
infix operator synonyme for union of two psMaps
get a stream of all key/value pairs in this map
get a sequence of all key/value pairs in this map
union of two psMaps
creates a new psMap that maps all the keys that exist either in psMap.this
or in other to the values they are mapped to. In case a key k exists in
both psMap.this and other, it will be mapped to psMap.this[k] or to other[k],
but it is undefined to which of these two.