1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-17 16:12:42 +08:00
Files
go-mixed/bloom/mem_store.go
2024-05-28 04:14:08 +08:00

53 lines
755 B
Go

package bloom
import (
"context"
"sync"
"github.com/bits-and-blooms/bitset"
)
type memStore struct {
size uint
set *bitset.BitSet // 内存位图
lock sync.RWMutex // 同步锁
}
func newMemStore(size uint) *memStore {
return &memStore{
size: size,
set: bitset.New(size),
}
}
func (s *memStore) Clear() {
s.lock.Lock()
defer s.lock.Unlock()
s.set.ClearAll()
}
func (s *memStore) Set(ctx context.Context, 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
}