DotFun

@Serializable(with = DotFunSerializer::class)
class DotFun<V>(val values: Map<Dot, V> = emptyMap()) : DotStore<DotFun<V>>

A DotStore mapping each Dot to a value V. Because a dot is minted once and never reused, a dot in both stores carries the same value, so the causal join needs no value-level conflict resolution — surviving dots simply keep their value. As Causal<DotFun<V>> this is a Multi-Value Register: concurrent writes each keep their (dot, value), surfacing the conflict rather than hiding it.

Serialized by DotFunSerializer, which emits values entries sorted by Dot key so that two replicas at the same logical state produce identical bytes regardless of delivery order (issue #713).

Constructors

Link copied to clipboard
constructor(values: Map<Dot, V> = emptyMap())

Properties

Link copied to clipboard
open override val dots: Set<Dot>

Every dot currently live in this store.

Link copied to clipboard
open override val empty: DotFun<V>

The empty (bottom) store of this shape — no dots.

Link copied to clipboard
open val isBottom: Boolean

True when the store holds no dots.

Link copied to clipboard
val values: Map<Dot, V>

Functions

Link copied to clipboard
open operator override fun equals(other: Any?): Boolean
Link copied to clipboard
open override fun hashCode(): Int
Link copied to clipboard
open override fun join(other: DotFun<V>, context: DotContext, otherContext: DotContext): DotFun<V>

The causal join with other. A dot is kept when it is live in both stores, or live in one and not yet witnessed by the other side's context; it is dropped only when one side still has it while the other has it in otherContext but not in its store — the signature of a deliberate remove. context is this store's surrounding causal history; otherContext is the other's.

Link copied to clipboard
open override fun toString(): String