ranger

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 23, 2026 License: MIT Imports: 3 Imported by: 0

README

ranger

import "github.com/Compogo/types/ranger"

Index

Variables

Ошибки, возвращаемые при создании диапазона.

var (
    // UpperBelowLowerError возникает, когда верхняя граница меньше или равна нижней.
    // Например, диапазон [10, 5] является некорректным.
    UpperBelowLowerError = errors.New("upper limit is below the lower limit")

    // OpenBoundError возникает, когда обе границы диапазона являются открытыми (OPEN).
    // Диапазон вида (-∞, +∞) не имеет смысла, так как включает все возможные значения.
    OpenBoundError = errors.New("both borders are open")
)

type BoundType

BoundType представляет тип границы.

type BoundType uint8

BoundType определяет тип границы диапазона.

const (
    // INCLUSIVE — включающая граница. Значение границы входит в диапазон.
    // Пример: [5, 10] — число 5 входит в диапазон.
    INCLUSIVE BoundType = iota

    // EXCLUSIVE — исключающая граница. Значение границы не входит в диапазон.
    // Пример: (5, 10) — число 5 не входит в диапазон.
    EXCLUSIVE

    // OPEN — открытая граница. Означает отсутствие ограничения (бесконечность).
    // Для нижней границы OPEN означает -∞, для верхней — +∞.
    OPEN
)

func (BoundType) String
func (i BoundType) String() string

type Bounder

Bounder определяет базовый контракт для любой границы диапазона. Предоставляет доступ к типу и значению границы.

type Bounder[T Numeric] interface {
    // Type возвращает тип границы: INCLUSIVE, EXCLUSIVE или OPEN.
    Type() BoundType

    // Value возвращает числовое значение границы.
    // Для OPEN границы возвращает экстремальное значение типа (minValue или maxValue).
    Value() T
}

type LowerBounder

LowerBounder определяет контракт для нижней границы диапазона. Комбинирует общий интерфейс Bounder со специфичным методом проверки.

type LowerBounder[T Numeric] interface {

    // IsAboveLowerBound проверяет, находится ли значение выше нижней границы.
    // Поведение зависит от типа границы:
    //   - INCLUSIVE: val >= граница
    //   - EXCLUSIVE: val > граница
    //   - OPEN: всегда true
    IsAboveLowerBound(T) bool
    // contains filtered or unexported methods
}

func NewExclusiveLowerBoundValue
func NewExclusiveLowerBoundValue[T Numeric](value T) LowerBounder[T]

NewExclusiveLowerBoundValue создаёт новую исключающую нижнюю границу. Возвращает интерфейс LowerBounder для использования в качестве нижней границы диапазона.

Пример:

lower := NewExclusiveLowerBoundValue(5) // нижняя граница: значение > 5

func NewInclusiveLowerBoundValue
func NewInclusiveLowerBoundValue[T Numeric](value T) LowerBounder[T]

NewInclusiveLowerBoundValue создаёт новую включающую нижнюю границу. Возвращает интерфейс LowerBounder для использования в качестве нижней границы диапазона.

Пример:

lower := NewInclusiveLowerBoundValue(5) // нижняя граница: значение >= 5

func NewOpenLowerBoundValue
func NewOpenLowerBoundValue[T Numeric]() LowerBounder[T]

NewOpenLowerBoundValue создаёт новую открытую нижнюю границу. Открытая граница означает отсутствие ограничения снизу (-∞). Возвращает интерфейс LowerBounder.

Пример:

lower := NewOpenLowerBoundValue[int]() // нижняя граница: -∞

type Numeric

Numeric определяет интерфейс всех числовых типов, которые могут быть использованы в диапазонах. Включает целые (знаковые и беззнаковые) и числа с плавающей точкой.

Поддерживаемые типы:

  • int, int8, int16, int32, int64
  • uint, uint8, uint16, uint32, uint64
  • float32, float64
type Numeric interface {
    // contains filtered or unexported methods
}

type Range

Range представляет собой диапазон значений числового типа T. Содержит нижнюю и верхнюю границы, каждая из которых может быть включающей (INCLUSIVE), исключающей (EXCLUSIVE) или открытой (OPEN).

Примеры диапазонов:

  • [1, 10] — от 1 до 10 включительно
  • (0, 100) — от 0 до 100 исключительно
  • (-∞, 5] — все значения меньше или равные 5
  • [0, +∞) — все значения больше или равные 0
type Range[T Numeric] struct {
    // contains filtered or unexported fields
}

func NewRange
func NewRange[T Numeric](lower LowerBounder[T], upper UpperBounder[T]) (*Range[T], error)

NewRange создаёт новый диапазон с указанными нижней и верхней границами. Выполняет валидацию границ:

  • Верхняя граница должна быть больше нижней
  • Обе границы не могут быть одновременно открытыми (OPEN)

Возвращает:

  • *Range[T] — созданный диапазон
  • error — ошибка валидации (UpperBelowLowerError или OpenBoundError)

Пример:

lower := NewInclusiveLowerBoundValue(0)
upper := NewExclusiveUpperBoundValue(100)
r, err := NewRange(lower, upper) // диапазон [0, 100)

func (*Range[T]) Contains
func (ranger *Range[T]) Contains(value T) bool

Contains проверяет, входит ли значение value в диапазон. Возвращает true, если значение удовлетворяет условиям обеих границ.

Пример:

r, _ := NewRange(NewInclusiveLowerBoundValue(0), NewInclusiveUpperBoundValue(10))
r.Contains(5)  // true
r.Contains(10) // true
r.Contains(-1) // false

func (*Range[T]) GetLowerBound
func (ranger *Range[T]) GetLowerBound() LowerBounder[T]

GetLowerBound возвращает нижнюю границу диапазона. Возвращаемое значение реализует интерфейс LowerBounder.

func (*Range[T]) GetUpperBound
func (ranger *Range[T]) GetUpperBound() UpperBounder[T]

GetUpperBound возвращает верхнюю границу диапазона. Возвращаемое значение реализует интерфейс UpperBounder.

type Ranger

Ranger определяет контракт для работы с диапазоном значений. Позволяет получить границы диапазона и проверить вхождение значения.

type Ranger[T Numeric] interface {
    // GetLowerBound возвращает нижнюю границу диапазона.
    GetLowerBound() LowerBounder[T]
    // GetUpperBound возвращает верхнюю границу диапазона.
    GetUpperBound() UpperBounder[T]
    // Contains проверяет, входит ли значение в диапазон.
    Contains(T) bool
}

type UpperBounder

UpperBounder определяет контракт для верхней границы диапазона. Комбинирует общий интерфейс Bounder со специфичным методом проверки.

type UpperBounder[T Numeric] interface {

    // IsBelowUpperBound проверяет, находится ли значение ниже верхней границы.
    // Поведение зависит от типа границы:
    //   - INCLUSIVE: val <= граница
    //   - EXCLUSIVE: val < граница
    //   - OPEN: всегда true
    IsBelowUpperBound(T) bool
    // contains filtered or unexported methods
}

func NewExclusiveUpperBoundValue
func NewExclusiveUpperBoundValue[T Numeric](value T) UpperBounder[T]

NewExclusiveUpperBoundValue создаёт новую исключающую верхнюю границу. Возвращает интерфейс UpperBounder для использования в качестве верхней границы диапазона.

Пример:

upper := NewExclusiveUpperBoundValue(10) // верхняя граница: значение < 10

func NewInclusiveUpperBoundValue
func NewInclusiveUpperBoundValue[T Numeric](value T) UpperBounder[T]

NewInclusiveUpperBoundValue создаёт новую включающую верхнюю границу. Возвращает интерфейс UpperBounder для использования в качестве верхней границы диапазона.

Пример:

upper := NewInclusiveUpperBoundValue(10) // верхняя граница: значение <= 10

func NewOpenUpperBoundValue
func NewOpenUpperBoundValue[T Numeric]() UpperBounder[T]

NewOpenUpperBoundValue создаёт новую открытую верхнюю границу. Открытая граница означает отсутствие ограничения сверху (+∞). Возвращает интерфейс UpperBounder.

Пример:

upper := NewOpenUpperBoundValue[int]() // верхняя граница: +∞

Generated by gomarkdoc

Documentation

Index

Constants

This section is empty.

Variables

View Source
var (
	// UpperBelowLowerError возникает, когда верхняя граница меньше или равна нижней.
	// Например, диапазон [10, 5] является некорректным.
	UpperBelowLowerError = errors.New("upper limit is below the lower limit")

	// OpenBoundError возникает, когда обе границы диапазона являются открытыми (OPEN).
	// Диапазон вида (-∞, +∞) не имеет смысла, так как включает все возможные значения.
	OpenBoundError = errors.New("both borders are open")
)

Ошибки, возвращаемые при создании диапазона.

Functions

This section is empty.

Types

type BoundType

type BoundType uint8

BoundType представляет тип границы.

const (
	// INCLUSIVE — включающая граница. Значение границы входит в диапазон.
	// Пример: [5, 10] — число 5 входит в диапазон.
	INCLUSIVE BoundType = iota

	// EXCLUSIVE — исключающая граница. Значение границы не входит в диапазон.
	// Пример: (5, 10) — число 5 не входит в диапазон.
	EXCLUSIVE

	// OPEN — открытая граница. Означает отсутствие ограничения (бесконечность).
	// Для нижней границы OPEN означает -∞, для верхней — +∞.
	OPEN
)

BoundType определяет тип границы диапазона.

func (BoundType) String

func (i BoundType) String() string

type Bounder added in v1.0.0

type Bounder[T Numeric] interface {
	// Type возвращает тип границы: INCLUSIVE, EXCLUSIVE или OPEN.
	Type() BoundType

	// Value возвращает числовое значение границы.
	// Для OPEN границы возвращает экстремальное значение типа (minValue или maxValue).
	Value() T
}

Bounder определяет базовый контракт для любой границы диапазона. Предоставляет доступ к типу и значению границы.

type LowerBounder added in v1.0.0

type LowerBounder[T Numeric] interface {
	Bounder[T]

	// IsAboveLowerBound проверяет, находится ли значение выше нижней границы.
	// Поведение зависит от типа границы:
	//   - INCLUSIVE: val >= граница
	//   - EXCLUSIVE: val > граница
	//   - OPEN: всегда true
	IsAboveLowerBound(T) bool
}

LowerBounder определяет контракт для нижней границы диапазона. Комбинирует общий интерфейс Bounder со специфичным методом проверки.

func NewExclusiveLowerBoundValue added in v1.0.0

func NewExclusiveLowerBoundValue[T Numeric](value T) LowerBounder[T]

NewExclusiveLowerBoundValue создаёт новую исключающую нижнюю границу. Возвращает интерфейс LowerBounder для использования в качестве нижней границы диапазона.

Пример:

lower := NewExclusiveLowerBoundValue(5) // нижняя граница: значение > 5

func NewInclusiveLowerBoundValue added in v1.0.0

func NewInclusiveLowerBoundValue[T Numeric](value T) LowerBounder[T]

NewInclusiveLowerBoundValue создаёт новую включающую нижнюю границу. Возвращает интерфейс LowerBounder для использования в качестве нижней границы диапазона.

Пример:

lower := NewInclusiveLowerBoundValue(5) // нижняя граница: значение >= 5

func NewOpenLowerBoundValue added in v1.0.0

func NewOpenLowerBoundValue[T Numeric]() LowerBounder[T]

NewOpenLowerBoundValue создаёт новую открытую нижнюю границу. Открытая граница означает отсутствие ограничения снизу (-∞). Возвращает интерфейс LowerBounder.

Пример:

lower := NewOpenLowerBoundValue[int]() // нижняя граница: -∞

type Numeric added in v1.0.0

type Numeric interface {
	~int | ~int8 | ~int16 | ~int32 | ~int64 |
		~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 |
		~float32 | ~float64
}

Numeric определяет интерфейс всех числовых типов, которые могут быть использованы в диапазонах. Включает целые (знаковые и беззнаковые) и числа с плавающей точкой.

Поддерживаемые типы:

  • int, int8, int16, int32, int64
  • uint, uint8, uint16, uint32, uint64
  • float32, float64

type Range

type Range[T Numeric] struct {
	// contains filtered or unexported fields
}

Range представляет собой диапазон значений числового типа T. Содержит нижнюю и верхнюю границы, каждая из которых может быть включающей (INCLUSIVE), исключающей (EXCLUSIVE) или открытой (OPEN).

Примеры диапазонов:

  • [1, 10] — от 1 до 10 включительно
  • (0, 100) — от 0 до 100 исключительно
  • (-∞, 5] — все значения меньше или равные 5
  • [0, +∞) — все значения больше или равные 0

func NewRange

func NewRange[T Numeric](lower LowerBounder[T], upper UpperBounder[T]) (*Range[T], error)

NewRange создаёт новый диапазон с указанными нижней и верхней границами. Выполняет валидацию границ:

  • Верхняя граница должна быть больше нижней
  • Обе границы не могут быть одновременно открытыми (OPEN)

Возвращает:

  • *Range[T] — созданный диапазон
  • error — ошибка валидации (UpperBelowLowerError или OpenBoundError)

Пример:

lower := NewInclusiveLowerBoundValue(0)
upper := NewExclusiveUpperBoundValue(100)
r, err := NewRange(lower, upper) // диапазон [0, 100)

func (*Range[T]) Contains

func (ranger *Range[T]) Contains(value T) bool

Contains проверяет, входит ли значение value в диапазон. Возвращает true, если значение удовлетворяет условиям обеих границ.

Пример:

r, _ := NewRange(NewInclusiveLowerBoundValue(0), NewInclusiveUpperBoundValue(10))
r.Contains(5)  // true
r.Contains(10) // true
r.Contains(-1) // false

func (*Range[T]) GetLowerBound added in v1.0.0

func (ranger *Range[T]) GetLowerBound() LowerBounder[T]

GetLowerBound возвращает нижнюю границу диапазона. Возвращаемое значение реализует интерфейс LowerBounder.

func (*Range[T]) GetUpperBound added in v1.0.0

func (ranger *Range[T]) GetUpperBound() UpperBounder[T]

GetUpperBound возвращает верхнюю границу диапазона. Возвращаемое значение реализует интерфейс UpperBounder.

type Ranger

type Ranger[T Numeric] interface {
	// GetLowerBound возвращает нижнюю границу диапазона.
	GetLowerBound() LowerBounder[T]
	// GetUpperBound возвращает верхнюю границу диапазона.
	GetUpperBound() UpperBounder[T]
	// Contains проверяет, входит ли значение в диапазон.
	Contains(T) bool
}

Ranger определяет контракт для работы с диапазоном значений. Позволяет получить границы диапазона и проверить вхождение значения.

type UpperBounder added in v1.0.0

type UpperBounder[T Numeric] interface {
	Bounder[T]

	// IsBelowUpperBound проверяет, находится ли значение ниже верхней границы.
	// Поведение зависит от типа границы:
	//   - INCLUSIVE: val <= граница
	//   - EXCLUSIVE: val < граница
	//   - OPEN: всегда true
	IsBelowUpperBound(T) bool
}

UpperBounder определяет контракт для верхней границы диапазона. Комбинирует общий интерфейс Bounder со специфичным методом проверки.

func NewExclusiveUpperBoundValue added in v1.0.0

func NewExclusiveUpperBoundValue[T Numeric](value T) UpperBounder[T]

NewExclusiveUpperBoundValue создаёт новую исключающую верхнюю границу. Возвращает интерфейс UpperBounder для использования в качестве верхней границы диапазона.

Пример:

upper := NewExclusiveUpperBoundValue(10) // верхняя граница: значение < 10

func NewInclusiveUpperBoundValue added in v1.0.0

func NewInclusiveUpperBoundValue[T Numeric](value T) UpperBounder[T]

NewInclusiveUpperBoundValue создаёт новую включающую верхнюю границу. Возвращает интерфейс UpperBounder для использования в качестве верхней границы диапазона.

Пример:

upper := NewInclusiveUpperBoundValue(10) // верхняя граница: значение <= 10

func NewOpenUpperBoundValue added in v1.0.0

func NewOpenUpperBoundValue[T Numeric]() UpperBounder[T]

NewOpenUpperBoundValue создаёт новую открытую верхнюю границу. Открытая граница означает отсутствие ограничения сверху (+∞). Возвращает интерфейс UpperBounder.

Пример:

upper := NewOpenUpperBoundValue[int]() // верхняя граница: +∞

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL