package types import ( "sig-pub/api/pb" "sig-pub/pkg/utils/collect" "sort" ) var SupportedExchanges = []pb.ExchangeType{ pb.ExchangeType_OKX, } func IsSupportExchange(exchange pb.ExchangeType) bool { for _, se := range SupportedExchanges { if se == exchange { return true } } return false } // 对交易所进行排序 func ExchangesSort(exchanges []pb.ExchangeType) { if len(exchanges) < 2 { return } sort.SliceStable(exchanges, func(i, j int) bool { return exchanges[i] < exchanges[j] }) } type ExchangeState[T any] struct { state []T } func NewExchangeState[T any]() *ExchangeState[T] { return NewExchangeStateInit(func() (v T) { return }) } func NewExchangeStateInit[T any](newer func() T) *ExchangeState[T] { maxExchange := collect.MustMax(SupportedExchanges, func(e pb.ExchangeType) int32 { return int32(e) }) es := &ExchangeState[T]{ state: make([]T, maxExchange+1), } for _, exchange := range SupportedExchanges { es.Set(exchange, newer()) } return es } func (s *ExchangeState[T]) IsSupport(exchange pb.ExchangeType) bool { return IsSupportExchange(exchange) } func (s *ExchangeState[T]) Get(exchange pb.ExchangeType) T { return s.state[exchange] } func (s *ExchangeState[T]) Set(exchange pb.ExchangeType, v T) { s.state[exchange] = v } func (s *ExchangeState[T]) Range(f func(exchange pb.ExchangeType, v T)) { for _, exchange := range SupportedExchanges { f(exchange, s.state[exchange]) } }