mirror of
https://github.com/luscis/openlan.git
synced 2025-10-05 16:47:11 +08:00
142 lines
2.5 KiB
Go
Executable File
142 lines
2.5 KiB
Go
Executable File
package cache
|
|
|
|
import (
|
|
"github.com/luscis/openlan/pkg/libol"
|
|
"github.com/luscis/openlan/pkg/models"
|
|
)
|
|
|
|
type EspSmap struct {
|
|
Esp *libol.SafeStrMap
|
|
}
|
|
|
|
func (p *EspSmap) Init(size int) {
|
|
p.Esp = libol.NewSafeStrMap(size)
|
|
}
|
|
|
|
func (p *EspSmap) Add(EspSmap *models.Esp) {
|
|
_ = p.Esp.Set(EspSmap.ID(), EspSmap)
|
|
}
|
|
|
|
func (p *EspSmap) Get(key string) *models.Esp {
|
|
ret := p.Esp.Get(key)
|
|
if ret != nil {
|
|
return ret.(*models.Esp)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *EspSmap) Del(key string) {
|
|
p.Esp.Del(key)
|
|
}
|
|
|
|
func (p *EspSmap) List() <-chan *models.Esp {
|
|
c := make(chan *models.Esp, 128)
|
|
go func() {
|
|
p.Esp.Iter(func(k string, v interface{}) {
|
|
m := v.(*models.Esp)
|
|
m.Update()
|
|
c <- m
|
|
})
|
|
c <- nil //Finish channel by nil.
|
|
}()
|
|
return c
|
|
}
|
|
|
|
var Esp = EspSmap{
|
|
Esp: libol.NewSafeStrMap(1024),
|
|
}
|
|
|
|
type EspSmapState struct {
|
|
State *libol.SafeStrMap
|
|
}
|
|
|
|
func (p *EspSmapState) Init(size int) {
|
|
p.State = libol.NewSafeStrMap(size)
|
|
}
|
|
|
|
func (p *EspSmapState) Add(EspSmap *models.EspState) {
|
|
_ = p.State.Set(EspSmap.ID(), EspSmap)
|
|
}
|
|
|
|
func (p *EspSmapState) Get(key string) *models.EspState {
|
|
ret := p.State.Get(key)
|
|
if ret != nil {
|
|
return ret.(*models.EspState)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *EspSmapState) Del(key string) {
|
|
p.State.Del(key)
|
|
}
|
|
|
|
func (p *EspSmapState) List(name string) <-chan *models.EspState {
|
|
c := make(chan *models.EspState, 128)
|
|
go func() {
|
|
p.State.Iter(func(k string, v interface{}) {
|
|
m := v.(*models.EspState)
|
|
if m.Name == name || name == "" {
|
|
m.Update()
|
|
c <- m
|
|
}
|
|
})
|
|
c <- nil //Finish channel by nil.
|
|
}()
|
|
return c
|
|
}
|
|
|
|
func (p *EspSmapState) Clear() {
|
|
p.State.Clear()
|
|
}
|
|
|
|
var EspState = EspSmapState{
|
|
State: libol.NewSafeStrMap(1024),
|
|
}
|
|
|
|
type EspSmapPolicy struct {
|
|
Policy *libol.SafeStrMap
|
|
}
|
|
|
|
func (p *EspSmapPolicy) Init(size int) {
|
|
p.Policy = libol.NewSafeStrMap(size)
|
|
}
|
|
|
|
func (p *EspSmapPolicy) Add(EspSmap *models.EspPolicy) {
|
|
_ = p.Policy.Set(EspSmap.ID(), EspSmap)
|
|
}
|
|
|
|
func (p *EspSmapPolicy) Get(key string) *models.EspPolicy {
|
|
ret := p.Policy.Get(key)
|
|
if ret != nil {
|
|
return ret.(*models.EspPolicy)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (p *EspSmapPolicy) Del(key string) {
|
|
p.Policy.Del(key)
|
|
}
|
|
|
|
func (p *EspSmapPolicy) List(name string) <-chan *models.EspPolicy {
|
|
c := make(chan *models.EspPolicy, 128)
|
|
go func() {
|
|
p.Policy.Iter(func(k string, v interface{}) {
|
|
m := v.(*models.EspPolicy)
|
|
if m.Name == name || name == "" {
|
|
m.Update()
|
|
c <- m
|
|
}
|
|
})
|
|
c <- nil //Finish channel by nil.
|
|
}()
|
|
return c
|
|
}
|
|
|
|
func (p *EspSmapPolicy) Clear() {
|
|
p.Policy.Clear()
|
|
}
|
|
|
|
var EspPolicy = EspSmapPolicy{
|
|
Policy: libol.NewSafeStrMap(1024),
|
|
}
|