11#ifndef INCGUARD_MGL_RANGE_H_1746895769
12#define INCGUARD_MGL_RANGE_H_1746895769
35 constexpr Range() noexcept = default;
44 constexpr
Range(T begin, T end) noexcept
56 [[nodiscard]]
constexpr T
Begin() const noexcept
67 [[nodiscard]]
constexpr T
End() const noexcept
105 if constexpr (std::is_floating_point_v<T>)
107 return _end - _begin <= std::numeric_limits<T>::epsilon();
111 return _begin == _end;
122 [[nodiscard]]
constexpr bool IsZero() const noexcept
124 if constexpr (std::is_floating_point_v<T>)
126 return std::abs(_begin) <= std::numeric_limits<T>::epsilon() &&
127 std::abs(_end) <= std::numeric_limits<T>::epsilon();
131 return _begin == 0 && _end == 0;
142 [[nodiscard]]
constexpr T
Next(T value)
const noexcept
161 [[nodiscard]]
constexpr T
Previous(T value)
const noexcept
181 [[nodiscard]]
constexpr bool Contains(T value)
const noexcept
185 return (value >= _begin) && (value <= _end);
189 return (value <= _begin) && (value >= _end);
200 [[nodiscard]]
constexpr T
Clamp(T value)
const noexcept
208 return std::clamp(value, _begin, _end);
212 return std::clamp(value, _end, _begin);
223 [[nodiscard]]
constexpr float Normalize(T value)
const noexcept
230 const auto fBegin =
static_cast<float>(_begin);
231 const auto fEnd =
static_cast<float>(_end);
232 const auto fValue =
static_cast<float>(value);
234 return (fValue - fBegin) / (fEnd - fBegin);
244 [[nodiscard]]
constexpr T
Scale(
float normalizedValue)
const noexcept
246 const auto fBegin =
static_cast<float>(_begin);
247 const auto fEnd =
static_cast<float>(_end);
249 return static_cast<T
>(fBegin + ((fEnd - fBegin) * normalizedValue));
値の範囲を表現するクラス
Definition mgl_range.h:28
constexpr bool IsSingleValue() const noexcept
値が範囲を持たない単一の値であるかを取得
Definition mgl_range.h:103
constexpr T Clamp(T value) const noexcept
指定した値を範囲内にクランプ
Definition mgl_range.h:200
constexpr bool IsPositive() const noexcept
値が正の方向に進むかを取得
Definition mgl_range.h:79
constexpr bool IsNegative() const noexcept
値が負の方向に進むかを取得
Definition mgl_range.h:91
constexpr bool Contains(T value) const noexcept
指定された値が範囲内に含まれているかを取得
Definition mgl_range.h:181
constexpr float Normalize(T value) const noexcept
値を0.0fから1.0fの値に正規化
Definition mgl_range.h:223
constexpr T Next(T value) const noexcept
指定された値の次の値を取得
Definition mgl_range.h:142
constexpr Range() noexcept=default
コンストラクタ
constexpr T End() const noexcept
終了値を取得
Definition mgl_range.h:67
constexpr T Previous(T value) const noexcept
指定された値の前の値を取得
Definition mgl_range.h:161
constexpr bool IsZero() const noexcept
範囲がゼロであるかを取得
Definition mgl_range.h:122
constexpr T Scale(float normalizedValue) const noexcept
正規化された値からスケーリング
Definition mgl_range.h:244
constexpr T Begin() const noexcept
開始値を取得
Definition mgl_range.h:56