summaryrefslogtreecommitdiff
path: root/vendor/codeberg.org/gruf/go-runners/pointer.go
blob: cc139309f9bf4dcd6c44e23e8e001d3a6934286a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package runners

import (
	"sync/atomic"
	"unsafe"
)

// atomic_pointer wraps an unsafe.Pointer with
// receiver methods for their atomic counterparts.
type atomic_pointer struct{ p unsafe.Pointer }

func (p *atomic_pointer) Load() unsafe.Pointer {
	return atomic.LoadPointer(&p.p)
}

func (p *atomic_pointer) Store(ptr unsafe.Pointer) {
	atomic.StorePointer(&p.p, ptr)
}

func (p *atomic_pointer) CAS(old, new unsafe.Pointer) bool {
	return atomic.CompareAndSwapPointer(&p.p, old, new)
}