summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-atomics/time.go
diff options
context:
space:
mode:
authorLibravatar Terin Stock <terinjokes@gmail.com>2022-04-26 20:30:25 -0700
committerLibravatar Terin Stock <terinjokes@gmail.com>2023-01-31 15:16:42 +0100
commit83b4c9ebc87d0fddf4e638f13e3af1483912e3a5 (patch)
tree47840b84c0fd3cb226eab2ecb3dbce0617163406 /vendor/codeberg.org/gruf/go-atomics/time.go
parent[chore] update URLs to forked source (diff)
downloadgotosocial-83b4c9ebc87d0fddf4e638f13e3af1483912e3a5.tar.xz
[chore] remove vendor
Diffstat (limited to 'vendor/codeberg.org/gruf/go-atomics/time.go')
-rw-r--r--vendor/codeberg.org/gruf/go-atomics/time.go58
1 files changed, 0 insertions, 58 deletions
diff --git a/vendor/codeberg.org/gruf/go-atomics/time.go b/vendor/codeberg.org/gruf/go-atomics/time.go
deleted file mode 100644
index 4bf20cc74..000000000
--- a/vendor/codeberg.org/gruf/go-atomics/time.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package atomics
-
-import (
- "sync/atomic"
- "time"
- "unsafe"
-)
-
-// Time provides user-friendly means of performing atomic operations on time.Time types.
-type Time struct{ ptr unsafe.Pointer }
-
-// NewTime will return a new Time instance initialized with zero value.
-func NewTime() *Time {
- var v time.Time
- return &Time{
- ptr: unsafe.Pointer(&v),
- }
-}
-
-// Store will atomically store time.Time value in address contained within v.
-func (v *Time) Store(val time.Time) {
- atomic.StorePointer(&v.ptr, unsafe.Pointer(&val))
-}
-
-// Load will atomically load time.Time value at address contained within v.
-func (v *Time) Load() time.Time {
- return *(*time.Time)(atomic.LoadPointer(&v.ptr))
-}
-
-// CAS performs a compare-and-swap for a(n) time.Time value at address contained within v.
-func (v *Time) CAS(cmp, swp time.Time) bool {
- for {
- // Load current value at address
- ptr := atomic.LoadPointer(&v.ptr)
- cur := *(*time.Time)(ptr)
-
- // Perform comparison against current
- if !(cur.Equal(cmp)) {
- return false
- }
-
- // Attempt to replace pointer
- if atomic.CompareAndSwapPointer(
- &v.ptr,
- ptr,
- unsafe.Pointer(&swp),
- ) {
- return true
- }
- }
-}
-
-// Swap atomically stores new time.Time value into address contained within v, and returns previous value.
-func (v *Time) Swap(swp time.Time) time.Time {
- ptr := unsafe.Pointer(&swp)
- ptr = atomic.SwapPointer(&v.ptr, ptr)
- return *(*time.Time)(ptr)
-}