1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-18 00:22:41 +08:00
Files
go-mixed/bloom/mem_store.go
2022-10-10 11:29:07 +08:00

52 lines
787 B
Go

package bloom
import (
"github.com/bits-and-blooms/bitset"
"github.com/charlienet/go-mixed/locker"
)
type memStore struct {
size uint
set *bitset.BitSet // 内存位图
lock locker.RWLocker // 同步锁
}
func newMemStore(size uint) *memStore {
return &memStore{
size: size,
set: bitset.New(size),
lock: locker.NewRWLocker(),
}
}
func (s *memStore) Clear() {
s.lock.Lock()
defer s.lock.Unlock()
s.set.ClearAll()
}
func (s *memStore) Set(offsets ...uint) error {
s.lock.Lock()
defer s.lock.Unlock()
for _, p := range offsets {
s.set.Set(p)
}
return nil
}
func (s *memStore) Test(offsets ...uint) (bool, error) {
s.lock.RLock()
defer s.lock.RUnlock()
for _, p := range offsets {
if !s.set.Test(p) {
return false, nil
}
}
return true, nil
}