pet-house/core/helper/arr/array.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
}