aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Wendt <chrismwendt@gmail.com>2022-06-08 03:25:55 -0600
committerChris Wendt <chrismwendt@gmail.com>2022-06-08 03:25:55 -0600
commit0efa4167cc4a8f7f294bf7eaba5a2d88df4b09b7 (patch)
tree43f56a7cbf79f813fd97859d84b77d51b449d348
parenteliminate some type assertions (diff)
downloadstm-0efa4167cc4a8f7f294bf7eaba5a2d88df4b09b7.tar.gz
stm-0efa4167cc4a8f7f294bf7eaba5a2d88df4b09b7.tar.xz
generic versionedValue[T]
-rw-r--r--var-value.go16
-rw-r--r--var.go2
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