diff --git a/internal/utils/atomic/bool.go b/internal/utils/atomic/bool.go new file mode 100644 index 00000000..0c462c3c --- /dev/null +++ b/internal/utils/atomic/bool.go @@ -0,0 +1,5 @@ +package atomic + +import "sync/atomic" + +type Bool = atomic.Bool diff --git a/internal/utils/atomic/atomic_value.go b/internal/utils/atomic/value.go similarity index 66% rename from internal/utils/atomic/atomic_value.go rename to internal/utils/atomic/value.go index 7f9bfd2e..65140fef 100644 --- a/internal/utils/atomic/atomic_value.go +++ b/internal/utils/atomic/value.go @@ -10,7 +10,11 @@ type Value[T any] struct { } func (a *Value[T]) Load() T { - return a.Value.Load().(T) + if v := a.Value.Load(); v != nil { + return v.(T) + } + var zero T + return zero } func (a *Value[T]) Store(v T) { @@ -18,11 +22,11 @@ func (a *Value[T]) Store(v T) { } func (a *Value[T]) Swap(v T) T { - return a.Value.Swap(v).(T) -} - -func (a *Value[T]) CompareAndSwap(oldV, newV T) bool { - return a.Value.CompareAndSwap(oldV, newV) + if v := a.Value.Swap(v); v != nil { + return v.(T) + } + var zero T + return zero } func (a *Value[T]) MarshalJSON() ([]byte, error) {