26 lines
394 B
Go
26 lines
394 B
Go
package fsmcore
|
|
|
|
import "sync/atomic"
|
|
|
|
type AtomicValue[T any] struct {
|
|
ptr atomic.Pointer[T]
|
|
}
|
|
|
|
func NewAtomicValue[T any](val T) *AtomicValue[T] {
|
|
value := &AtomicValue[T]{}
|
|
value.ptr.Store(&val)
|
|
return value
|
|
}
|
|
|
|
func (v *AtomicValue[T]) Load() (result T) {
|
|
val := v.ptr.Load()
|
|
if val == nil {
|
|
return
|
|
}
|
|
return *val
|
|
}
|
|
|
|
func (v *AtomicValue[T]) Store(value T) {
|
|
v.ptr.Store(&value)
|
|
}
|