No matching definitions.

crdt/register

src/crdt/register.tur
defstruct

LwwRegister

(defstruct LwwRegister [value : int stamp : Hlc])

one value, last writer wins by HLC stamp.

Since: crdt-spice-plan C3

defn

lww-new

(lww-new [r : Sym] :)

a register owned by a replica, holding 0.

rthe replica

A register at the zero stamp.

(lww-new (quote alice))

Since: crdt-spice-plan C3

defn

lww-set

(lww-set [^borrow g : LwwRegister v : int now : int] :)

write a value.

gthe register
vthe new value
nowcurrent wall time

A register holding v, stamped strictly after the old one.

(lww-set (lww-new (quote alice)) 42 1000)

Since: crdt-spice-plan C3

defn

lww-value

(lww-value [^borrow g : LwwRegister] :)

the current value.

gthe register

Its value.

(lww-value g)   ; => 42

Since: crdt-spice-plan C3

defn

lww-stamp

(lww-stamp [^borrow g : LwwRegister] :)

the stamp of the winning write.

gthe register

Its HLC stamp.

(lww-stamp g)

Since: crdt-spice-plan C3

defn

lww-delta-set

(lww-delta-set [^borrow g : LwwRegister v : int now : int] :)

the DELTA of a write.

gthe register
vthe new value
nowcurrent wall time

A register holding v, stamped strictly after g -- which is exactly the new state.

(lww-delta-set g 42 1000)

Since: crdt-spice-plan C4

defstruct

MvRegister

(defstruct MvRegister [vals : int stamp : Hlc])

every concurrent value, for the caller to resolve.

Since: crdt-spice-plan C3

defn

mv-new

(mv-new [r : Sym] :)

an empty multi-value register.

rthe replica

A register holding no values.

(mv-new (quote alice))

Since: crdt-spice-plan C3

defn

mv-set

(mv-set [^borrow g : MvRegister v : int now : int] :)

write a value, replacing everything this replica has observed.

gthe register
vthe new value
nowcurrent wall time

A register holding only v.

(mv-set (mv-new (quote alice)) 42 1000)

Since: crdt-spice-plan C3

defn

mv-values

(mv-values [^borrow g : MvRegister] :)

how many distinct concurrent values are held.

gthe register

The number of values; 1 when there is no conflict.

(mv-values g)   ; => 2

Since: crdt-spice-plan C3

defn

mv-count

(mv-count [^borrow g : MvRegister] :)

alias for mv-values, for symmetry with the set types.

gthe register

The number of values held.

(mv-count g)   ; => 1

Since: crdt-spice-plan C3

defn

mv-delta-set

(mv-delta-set [^borrow g : MvRegister v : int now : int] :)

the DELTA of a write.

gthe register
vthe new value
nowcurrent wall time

A register holding only v.

(mv-delta-set g 42 1000)

Since: crdt-spice-plan C4

Internal definitions
__lww-pick-- internal: the later of two registers.
JoinSemilattice[LwwRegister]-- the later stamp wins.
Eq[LwwRegister]-- same value and same stamp.
DeltaCRDT[LwwRegister]-- the delta is the register itself.
__mv-merge-- internal: union the value sets.
__mv-loop-- internal.
JoinSemilattice[MvRegister]-- keep every value from both sides.
Eq[MvRegister]-- same number of values.
DeltaCRDT[MvRegister]-- the delta is the register itself.