From 0efa4167cc4a8f7f294bf7eaba5a2d88df4b09b7 Mon Sep 17 00:00:00 2001 From: Chris Wendt Date: Wed, 8 Jun 2022 03:25:55 -0600 Subject: generic versionedValue[T] --- var-value.go | 16 ++++++++-------- 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 { diff --git a/var.go b/var.go index eabf422..2354d96 100644 --- a/var.go +++ b/var.go @@ -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 -- cgit v1.2.3