package gates const UNUSED_SELECTOR = uint64(^uint32(0)) // max uint32 type Range struct { start uint64 end uint64 } type SelectorsInfo struct { selectorIndices []uint64 groups []Range } func NewSelectorsInfo(selectorIndices []uint64, groupStarts []uint64, groupEnds []uint64) *SelectorsInfo { if len(groupStarts) != len(groupEnds) { panic("groupStarts and groupEnds must have the same length") } groups := []Range{} for i := range groupStarts { groups = append(groups, Range{ start: groupStarts[i], end: groupEnds[i], }) } return &SelectorsInfo{ selectorIndices: selectorIndices, groups: groups, } } func (s *SelectorsInfo) NumSelectors() uint64 { return uint64(len(s.groups)) }