123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 |
- package gopacket
- type LayerClass interface {
-
-
- Contains(LayerType) bool
-
-
-
- LayerTypes() []LayerType
- }
- func (l LayerType) Contains(a LayerType) bool {
- return l == a
- }
- func (l LayerType) LayerTypes() []LayerType {
- return []LayerType{l}
- }
- type LayerClassSlice []bool
- func (s LayerClassSlice) Contains(t LayerType) bool {
- return int(t) < len(s) && s[t]
- }
- func (s LayerClassSlice) LayerTypes() (all []LayerType) {
- for i := 0; i < len(s); i++ {
- if s[i] {
- all = append(all, LayerType(i))
- }
- }
- return
- }
- func NewLayerClassSlice(types []LayerType) LayerClassSlice {
- var max LayerType
- for _, typ := range types {
- if typ > max {
- max = typ
- }
- }
- t := make([]bool, int(max+1))
- for _, typ := range types {
- t[typ] = true
- }
- return t
- }
- type LayerClassMap map[LayerType]bool
- func (m LayerClassMap) Contains(t LayerType) bool {
- return m[t]
- }
- func (m LayerClassMap) LayerTypes() (all []LayerType) {
- for t := range m {
- all = append(all, t)
- }
- return
- }
- func NewLayerClassMap(types []LayerType) LayerClassMap {
- m := LayerClassMap{}
- for _, typ := range types {
- m[typ] = true
- }
- return m
- }
- func NewLayerClass(types []LayerType) LayerClass {
- for _, typ := range types {
- if typ > maxLayerType {
-
-
- return NewLayerClassMap(types)
- }
- }
- return NewLayerClassSlice(types)
- }
|