diff options
-rw-r--r-- | var-value.go | 16 | ||||
-rw-r--r-- | var.go | 2 |
2 files changed, 9 insertions, 9 deletions
diff --git a/var-value.go b/var-value.go index 966399a..f4921f3 100644 --- a/var-value.go +++ b/var-value.go @@ -8,24 +8,24 @@ type VarValue interface { type version uint64 -type versionedValue struct { - value interface{} +type versionedValue[T any] struct { + value T version version } -func (me versionedValue) Set(newValue interface{}) VarValue { - return versionedValue{ - value: newValue, +func (me versionedValue[T]) Set(newValue interface{}) VarValue { + return versionedValue[T]{ + value: newValue.(T), version: me.version + 1, } } -func (me versionedValue) Get() interface{} { +func (me versionedValue[T]) Get() interface{} { return me.value } -func (me versionedValue) Changed(other VarValue) bool { - return me.version != other.(versionedValue).version +func (me versionedValue[T]) Changed(other VarValue) bool { + return me.version != other.(versionedValue[T]).version } type customVarValue[T any] struct { @@ -54,7 +54,7 @@ func (v *Var[T]) wakeWatchers(new VarValue) { // Returns a new STM variable. func NewVar[T any](val T) *Var[T] { v := &Var[T]{} - v.value.Store(versionedValue{ + v.value.Store(versionedValue[T]{ value: val, }) return v |