aboutsummaryrefslogtreecommitdiff
path: root/var-value.go
diff options
context:
space:
mode:
authorMatt Joiner <anacrolix@gmail.com>2022-06-14 08:59:02 +1000
committerGitHub <noreply@github.com>2022-06-14 08:59:02 +1000
commit4f6e80b7bb8c9a8b3036e54b6d02dcc66a690162 (patch)
treeb4810cadfd0ce4a21963ccac5a051e9a50a91f4f /var-value.go
parentBump test timeout (#3) (diff)
parentreplace "interface{}" with "any" (diff)
downloadstm-4f6e80b7bb8c9a8b3036e54b6d02dcc66a690162.tar.gz
stm-4f6e80b7bb8c9a8b3036e54b6d02dcc66a690162.tar.xz
Merge pull request #4 from chrismwendt/generics
Generics
Diffstat (limited to 'var-value.go')
-rw-r--r--var-value.go40
1 files changed, 20 insertions, 20 deletions
diff --git a/var-value.go b/var-value.go
index ff97104..3518bf6 100644
--- a/var-value.go
+++ b/var-value.go
@@ -1,51 +1,51 @@
package stm
type VarValue interface {
- Set(interface{}) VarValue
- Get() interface{}
+ Set(any) VarValue
+ Get() any
Changed(VarValue) bool
}
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 any) VarValue {
+ return versionedValue[T]{
+ value: newValue.(T),
version: me.version + 1,
}
}
-func (me versionedValue) Get() interface{} {
+func (me versionedValue[T]) Get() any {
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 struct {
- value interface{}
- changed func(interface{}, interface{}) bool
+type customVarValue[T any] struct {
+ value T
+ changed func(T, T) bool
}
-var _ VarValue = customVarValue{}
+var _ VarValue = customVarValue[struct{}]{}
-func (me customVarValue) Changed(other VarValue) bool {
- return me.changed(me.value, other.(customVarValue).value)
+func (me customVarValue[T]) Changed(other VarValue) bool {
+ return me.changed(me.value, other.(customVarValue[T]).value)
}
-func (me customVarValue) Set(newValue interface{}) VarValue {
- return customVarValue{
- value: newValue,
+func (me customVarValue[T]) Set(newValue any) VarValue {
+ return customVarValue[T]{
+ value: newValue.(T),
changed: me.changed,
}
}
-func (me customVarValue) Get() interface{} {
+func (me customVarValue[T]) Get() any {
return me.value
}