init
This commit is contained in:
commit
d191055c2d
62
abstract/abstract.go
Normal file
62
abstract/abstract.go
Normal file
@ -0,0 +1,62 @@
|
||||
package abstract
|
||||
|
||||
import (
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
)
|
||||
|
||||
type IStore[K comparable, T any] interface {
|
||||
Load(K) (T, bool)
|
||||
Delete(K)
|
||||
Store(K, T)
|
||||
GetData() map[K]T
|
||||
GetUID() int64
|
||||
NewUID(int64) int64
|
||||
Lock()
|
||||
Unlock()
|
||||
RLock()
|
||||
RUnlock()
|
||||
}
|
||||
|
||||
type Store[K comparable, V any] struct {
|
||||
Data map[K]V
|
||||
UID atomic.Int64
|
||||
sync.RWMutex
|
||||
}
|
||||
|
||||
func (c *Store[K, V]) GetUID() int64 {
|
||||
return c.UID.Load()
|
||||
}
|
||||
|
||||
func (c *Store[K, V]) NewUID(i int64) int64 {
|
||||
return c.UID.Add(i)
|
||||
}
|
||||
|
||||
func (c *Store[K, V]) GetData() map[K]V {
|
||||
return c.Data
|
||||
}
|
||||
|
||||
func (c *Store[K, V]) Load(key K) (V, bool) {
|
||||
c.RLock()
|
||||
if d, ok := c.Data[key]; ok {
|
||||
c.RUnlock()
|
||||
return d, true
|
||||
}
|
||||
c.RUnlock()
|
||||
|
||||
var empty V
|
||||
|
||||
return empty, false
|
||||
}
|
||||
|
||||
func (c *Store[K, V]) Store(key K, d V) {
|
||||
c.Lock()
|
||||
c.Data[key] = d
|
||||
c.Unlock()
|
||||
}
|
||||
|
||||
func (c *Store[K, V]) Delete(key K) {
|
||||
c.Lock()
|
||||
delete(c.Data, key)
|
||||
c.Unlock()
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user