From 2a64b89bdbc8fec645dd688bd0322f45c067f295 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 4 Sep 2020 15:44:51 +1000 Subject: Add custom VarValue and const for sleep backoff --- var-value.go | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 var-value.go (limited to 'var-value.go') diff --git a/var-value.go b/var-value.go new file mode 100644 index 0000000..ff97104 --- /dev/null +++ b/var-value.go @@ -0,0 +1,51 @@ +package stm + +type VarValue interface { + Set(interface{}) VarValue + Get() interface{} + Changed(VarValue) bool +} + +type version uint64 + +type versionedValue struct { + value interface{} + version version +} + +func (me versionedValue) Set(newValue interface{}) VarValue { + return versionedValue{ + value: newValue, + version: me.version + 1, + } +} + +func (me versionedValue) Get() interface{} { + return me.value +} + +func (me versionedValue) Changed(other VarValue) bool { + return me.version != other.(versionedValue).version +} + +type customVarValue struct { + value interface{} + changed func(interface{}, interface{}) bool +} + +var _ VarValue = customVarValue{} + +func (me customVarValue) Changed(other VarValue) bool { + return me.changed(me.value, other.(customVarValue).value) +} + +func (me customVarValue) Set(newValue interface{}) VarValue { + return customVarValue{ + value: newValue, + changed: me.changed, + } +} + +func (me customVarValue) Get() interface{} { + return me.value +} -- cgit v1.2.3