2018-10-28 15:49:45 -07:00
|
|
|
package server
|
2017-09-30 07:29:03 -07:00
|
|
|
|
2017-09-30 08:00:29 -07:00
|
|
|
import (
|
|
|
|
"sync/atomic"
|
|
|
|
)
|
2017-09-30 07:29:03 -07:00
|
|
|
|
2018-03-06 22:02:38 -07:00
|
|
|
type aint struct{ v uintptr }
|
2017-09-30 07:29:03 -07:00
|
|
|
|
|
|
|
func (a *aint) add(d int) int {
|
2018-03-06 22:02:38 -07:00
|
|
|
if d < 0 {
|
2018-03-06 22:07:38 -07:00
|
|
|
return int(atomic.AddUintptr(&a.v, ^uintptr((d*-1)-1)))
|
2018-03-06 22:02:38 -07:00
|
|
|
}
|
|
|
|
return int(atomic.AddUintptr(&a.v, uintptr(d)))
|
2017-09-30 07:29:03 -07:00
|
|
|
}
|
|
|
|
func (a *aint) get() int {
|
2018-03-06 22:02:38 -07:00
|
|
|
return int(atomic.LoadUintptr(&a.v))
|
2017-09-30 07:29:03 -07:00
|
|
|
}
|
|
|
|
func (a *aint) set(i int) int {
|
2018-03-06 22:02:38 -07:00
|
|
|
return int(atomic.SwapUintptr(&a.v, uintptr(i)))
|
2017-09-30 07:29:03 -07:00
|
|
|
}
|
|
|
|
|
2018-03-06 22:02:38 -07:00
|
|
|
type abool struct{ v uint32 }
|
2017-09-30 07:29:03 -07:00
|
|
|
|
|
|
|
func (a *abool) on() bool {
|
2018-03-06 22:02:38 -07:00
|
|
|
return atomic.LoadUint32(&a.v) != 0
|
2017-09-30 07:29:03 -07:00
|
|
|
}
|
|
|
|
func (a *abool) set(t bool) bool {
|
|
|
|
if t {
|
2018-03-06 22:02:38 -07:00
|
|
|
return atomic.SwapUint32(&a.v, 1) != 0
|
2017-09-30 07:29:03 -07:00
|
|
|
}
|
2018-03-06 22:02:38 -07:00
|
|
|
return atomic.SwapUint32(&a.v, 0) != 0
|
2017-09-30 07:29:03 -07:00
|
|
|
}
|