diff options
author | Matt Joiner <anacrolix@gmail.com> | 2020-09-04 15:44:51 +1000 |
---|---|---|
committer | Matt Joiner <anacrolix@gmail.com> | 2020-09-10 09:22:35 +1000 |
commit | 2a64b89bdbc8fec645dd688bd0322f45c067f295 (patch) | |
tree | 6e1e7d5606d3a16a77ccdd47eb8654296862acf7 /var-value.go | |
parent | Add exponentially longer sleeping between transaction attempts (diff) | |
download | stm-2a64b89bdbc8fec645dd688bd0322f45c067f295.tar.gz stm-2a64b89bdbc8fec645dd688bd0322f45c067f295.tar.xz |
Add custom VarValue and const for sleep backoff
Diffstat (limited to 'var-value.go')
-rw-r--r-- | var-value.go | 51 |
1 files changed, 51 insertions, 0 deletions
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 +} |