Files
openlan/pkg/cache/esp.go
2022-07-29 23:38:54 +08:00

142 lines
2.4 KiB
Go
Executable File

package cache
import (
"github.com/luscis/openlan/pkg/libol"
"github.com/luscis/openlan/pkg/models"
)
type esp struct {
Esp *libol.SafeStrMap
}
func (p *esp) Init(size int) {
p.Esp = libol.NewSafeStrMap(size)
}
func (p *esp) Add(esp *models.Esp) {
_ = p.Esp.Set(esp.ID(), esp)
}
func (p *esp) Get(key string) *models.Esp {
ret := p.Esp.Get(key)
if ret != nil {
return ret.(*models.Esp)
}
return nil
}
func (p *esp) Del(key string) {
p.Esp.Del(key)
}
func (p *esp) 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 = esp{
Esp: libol.NewSafeStrMap(1024),
}
type espState struct {
State *libol.SafeStrMap
}
func (p *espState) Init(size int) {
p.State = libol.NewSafeStrMap(size)
}
func (p *espState) Add(esp *models.EspState) {
_ = p.State.Set(esp.ID(), esp)
}
func (p *espState) Get(key string) *models.EspState {
ret := p.State.Get(key)
if ret != nil {
return ret.(*models.EspState)
}
return nil
}
func (p *espState) Del(key string) {
p.State.Del(key)
}
func (p *espState) 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 *espState) Clear() {
p.State.Clear()
}
var EspState = espState{
State: libol.NewSafeStrMap(1024),
}
type espPolicy struct {
Policy *libol.SafeStrMap
}
func (p *espPolicy) Init(size int) {
p.Policy = libol.NewSafeStrMap(size)
}
func (p *espPolicy) Add(esp *models.EspPolicy) {
_ = p.Policy.Set(esp.ID(), esp)
}
func (p *espPolicy) Get(key string) *models.EspPolicy {
ret := p.Policy.Get(key)
if ret != nil {
return ret.(*models.EspPolicy)
}
return nil
}
func (p *espPolicy) Del(key string) {
p.Policy.Del(key)
}
func (p *espPolicy) 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 *espPolicy) Clear() {
p.Policy.Clear()
}
var EspPolicy = espPolicy{
Policy: libol.NewSafeStrMap(1024),
}