github.com/kelleygo/clashcore@v1.0.2/common/utils/range.go (about) 1 package utils 2 3 import ( 4 "golang.org/x/exp/constraints" 5 ) 6 7 type Range[T constraints.Ordered] struct { 8 start T 9 end T 10 } 11 12 func NewRange[T constraints.Ordered](start, end T) Range[T] { 13 if start > end { 14 return Range[T]{ 15 start: end, 16 end: start, 17 } 18 } 19 20 return Range[T]{ 21 start: start, 22 end: end, 23 } 24 } 25 26 func (r Range[T]) Contains(t T) bool { 27 return t >= r.start && t <= r.end 28 } 29 30 func (r Range[T]) LeftContains(t T) bool { 31 return t >= r.start && t < r.end 32 } 33 34 func (r Range[T]) RightContains(t T) bool { 35 return t > r.start && t <= r.end 36 } 37 38 func (r Range[T]) Start() T { 39 return r.start 40 } 41 42 func (r Range[T]) End() T { 43 return r.end 44 }