2016-03-03 09:39:19 +01:00
|
|
|
// Copyright 2016 The Chihaya Authors. All rights reserved.
|
|
|
|
// Use of this source code is governed by the BSD 2-Clause license,
|
|
|
|
// which can be found in the LICENSE file.
|
|
|
|
|
|
|
|
package memory
|
|
|
|
|
|
|
|
import (
|
|
|
|
"sync"
|
|
|
|
|
|
|
|
"github.com/chihaya/chihaya/server/store"
|
|
|
|
)
|
|
|
|
|
|
|
|
func init() {
|
|
|
|
store.RegisterStringStoreDriver("memory", &stringStoreDriver{})
|
|
|
|
}
|
|
|
|
|
|
|
|
type stringStoreDriver struct{}
|
|
|
|
|
2016-03-11 21:09:49 +01:00
|
|
|
func (d *stringStoreDriver) New(_ *store.DriverConfig) (store.StringStore, error) {
|
2016-03-03 09:39:19 +01:00
|
|
|
return &stringStore{
|
|
|
|
strings: make(map[string]struct{}),
|
|
|
|
}, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
type stringStore struct {
|
|
|
|
strings map[string]struct{}
|
|
|
|
sync.RWMutex
|
|
|
|
}
|
|
|
|
|
|
|
|
var _ store.StringStore = &stringStore{}
|
|
|
|
|
|
|
|
func (ss *stringStore) PutString(s string) error {
|
|
|
|
ss.Lock()
|
|
|
|
defer ss.Unlock()
|
|
|
|
|
|
|
|
ss.strings[s] = struct{}{}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ss *stringStore) HasString(s string) (bool, error) {
|
|
|
|
ss.RLock()
|
|
|
|
defer ss.RUnlock()
|
|
|
|
|
|
|
|
_, ok := ss.strings[s]
|
|
|
|
|
|
|
|
return ok, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (ss *stringStore) RemoveString(s string) error {
|
|
|
|
ss.Lock()
|
|
|
|
defer ss.Unlock()
|
|
|
|
|
2016-05-01 23:56:07 +02:00
|
|
|
if _, ok := ss.strings[s]; !ok {
|
|
|
|
return store.ErrResourceDoesNotExist
|
|
|
|
}
|
|
|
|
|
2016-03-03 09:39:19 +01:00
|
|
|
delete(ss.strings, s)
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|