63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package arr
|
|
|
|
import "sync"
|
|
|
|
type ArrayType interface {
|
|
Add(value interface{})
|
|
Check(value interface{}) bool
|
|
Len() int
|
|
Values() map[interface{}]bool
|
|
}
|
|
|
|
// CheckType type for check array data
|
|
type CheckArrayType struct {
|
|
values map[interface{}]bool
|
|
sm sync.Mutex
|
|
len int
|
|
}
|
|
|
|
// NewCheckArrayType
|
|
func NewCheckArrayType(len int) *CheckArrayType {
|
|
return &CheckArrayType{values: make(map[interface{}]bool, len)}
|
|
}
|
|
|
|
// Add
|
|
func (ct *CheckArrayType) Add(value interface{}) {
|
|
defer ct.sm.Unlock()
|
|
ct.sm.Lock()
|
|
ct.values[value] = true
|
|
ct.len++
|
|
}
|
|
|
|
// AddMutil
|
|
func (ct *CheckArrayType) AddMutil(values ...interface{}) {
|
|
for _, v := range values {
|
|
v := v
|
|
ct.Add(v)
|
|
}
|
|
}
|
|
|
|
// Check
|
|
func (ct *CheckArrayType) Check(value interface{}) bool {
|
|
defer ct.sm.Unlock()
|
|
ct.sm.Lock()
|
|
if b, ok := ct.values[value]; ok && b {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// Len
|
|
func (ct *CheckArrayType) Len() int {
|
|
defer ct.sm.Unlock()
|
|
ct.sm.Lock()
|
|
return ct.len
|
|
}
|
|
|
|
// Values
|
|
func (ct *CheckArrayType) Values() map[interface{}]bool {
|
|
defer ct.sm.Unlock()
|
|
ct.sm.Lock()
|
|
return ct.values
|
|
}
|