range.go 647 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package utils
  2. import (
  3. "golang.org/x/exp/constraints"
  4. )
  5. type Range[T constraints.Ordered] struct {
  6. start T
  7. end T
  8. }
  9. func NewRange[T constraints.Ordered](start, end T) Range[T] {
  10. if start > end {
  11. return Range[T]{
  12. start: end,
  13. end: start,
  14. }
  15. }
  16. return Range[T]{
  17. start: start,
  18. end: end,
  19. }
  20. }
  21. func (r Range[T]) Contains(t T) bool {
  22. return t >= r.start && t <= r.end
  23. }
  24. func (r Range[T]) LeftContains(t T) bool {
  25. return t >= r.start && t < r.end
  26. }
  27. func (r Range[T]) RightContains(t T) bool {
  28. return t > r.start && t <= r.end
  29. }
  30. func (r Range[T]) Start() T {
  31. return r.start
  32. }
  33. func (r Range[T]) End() T {
  34. return r.end
  35. }