The data-type specific relations r,r0 and r1 used for reducing the POLog size via causal redundancy
Updates the current CRDT.state with the sequence of stable operations that were removed from the POLog on POLog.stable The implementation will vary depending on the CRDT's state type.
Updates the current CRDT.state with the sequence of stable operations that were removed from the POLog on POLog.stable The implementation will vary depending on the CRDT's state type.
the current CRDT state
the sequence of stable operations that were removed from the POLog
the updated state
Data-type specific method that updates the stable state with the newly delivered operation, that is always on the causal future of all the (non-timestamped) operations currently in the state.
Data-type specific method that updates the stable state with the newly delivered operation, that is always on the causal future of all the (non-timestamped) operations currently in the state. This method is needed because operations in the causal future could make stable operations redundant (e.g. in a AWSet a ClearOp makes all the stable AddOp redundant and hence must be removed) The returned state could potentially contain less operations if they were discarded, but it would never contain more operations, in other words the newly delivered operation must not be added to the state.
the newly delivered operation
a flag indicating if the newly delivered operation was redundant or it was added to the POLog.
the current CRDT state
the updated state
Default CRDT instance.
Default CRDT instance.
Adds the operation to the POLog using the causal redundancy relations and also updates the state with the newly delivered operation.
Adds the operation to the POLog using the causal redundancy relations and also updates the state with the newly delivered operation.
newly delivered operation
operation's timestamp
operation's metadata
operation's metadata
a copy of the CRDT with its POLog and state updated
A pure-op based doesn't need to check preconditions because the framework just returns the unmodified operation on prepare
A pure-op based doesn't need to check preconditions because the framework just returns the unmodified operation on prepare
Update phase 1 ("atSource").
Update phase 1 ("atSource"). Prepares an operation for phase 2.
"This function takes a stable timestamp t (fed by the TCSB middleware) and the full PO-Log s as input, and returns a new PO-Log (i.e., a map), possibly discarding a set of operations at once."
"This function takes a stable timestamp t (fed by the TCSB middleware) and the full PO-Log s as input, and returns a new PO-Log (i.e., a map), possibly discarding a set of operations at once."
"The stable handler, on the other hand, invokes stabilize and then strips the timestamp (if the operation has not been discarded by stabilize), by replacing a (t', o') pair that is present in the returned PO-Log by (⊥, o')" The actual implementation doesn't replace the timestamp with ⊥, instead it calls stabilizeState with the current CRDT.state and the sequence of stable operations discarded from the POLog.
"The stable handler, on the other hand, invokes stabilize and then strips the timestamp (if the operation has not been discarded by stabilize), by replacing a (t', o') pair that is present in the returned PO-Log by (⊥, o')" The actual implementation doesn't replace the timestamp with ⊥, instead it calls stabilizeState with the current CRDT.state and the sequence of stable operations discarded from the POLog.
a crdt
a stable VectorTime fed by the middleware
a possible optimized crdt after discarding operations and removing timestamps
Returns the CRDT value (for example, the entries of an OR-Set)
Returns the CRDT value (for example, the entries of an OR-Set)
Type-class for pure-op based CRDT.
CRDT state type
CRDT value type