mirror of https://github.com/tidwall/tile38.git
70 lines
1016 B
Go
70 lines
1016 B
Go
package controller
|
|
|
|
import (
|
|
"sync"
|
|
"sync/atomic"
|
|
"time"
|
|
)
|
|
|
|
type aint struct{ v int64 }
|
|
|
|
func (a *aint) add(d int) int {
|
|
return int(atomic.AddInt64(&a.v, int64(d)))
|
|
}
|
|
func (a *aint) get() int {
|
|
return int(atomic.LoadInt64(&a.v))
|
|
}
|
|
func (a *aint) set(i int) int {
|
|
return int(atomic.SwapInt64(&a.v, int64(i)))
|
|
}
|
|
|
|
type abool struct{ v int64 }
|
|
|
|
func (a *abool) on() bool {
|
|
return atomic.LoadInt64(&a.v) != 0
|
|
}
|
|
func (a *abool) set(t bool) bool {
|
|
if t {
|
|
return atomic.SwapInt64(&a.v, 1) != 0
|
|
}
|
|
return atomic.SwapInt64(&a.v, 0) != 0
|
|
}
|
|
|
|
type astring struct {
|
|
mu sync.Mutex
|
|
v string
|
|
}
|
|
|
|
func (a *astring) get() string {
|
|
a.mu.Lock()
|
|
p := a.v
|
|
a.mu.Unlock()
|
|
return p
|
|
}
|
|
func (a *astring) set(s string) string {
|
|
a.mu.Lock()
|
|
p := a.v
|
|
a.v = s
|
|
a.mu.Unlock()
|
|
return p
|
|
}
|
|
|
|
type atime struct {
|
|
mu sync.Mutex
|
|
v time.Time
|
|
}
|
|
|
|
func (a *atime) get() time.Time {
|
|
a.mu.Lock()
|
|
p := a.v
|
|
a.mu.Unlock()
|
|
return p
|
|
}
|
|
func (a *atime) set(t time.Time) time.Time {
|
|
a.mu.Lock()
|
|
p := a.v
|
|
a.v = t
|
|
a.mu.Unlock()
|
|
return p
|
|
}
|