30 static void Handle(
const T& _value,
const T& _min,
const T& _max)
32 assert((_value < _min || _value > _max) &&
"RangeNum: 値が範囲外です");
43 static void Handle(T& _value,
const T& _min,
const T& _max)
49 else if (_value > _max)
63 static void Handle(
const T& _value,
const T& _min,
const T& _max)
65 if (_value < _min || _value > _max)
79 std::enable_if_t<std::is_integral<T>::value,
int> = 0>
80 static void Handle(T& _value,
const T& _min,
const T& _max)
82 T range = _max - _min + 1;
89 auto positive_mod = [](T a, T b) -> T
92 return (r < 0) ? r + b : r;
96 _value = positive_mod(_value - _min, range) + _min;
100 std::enable_if_t<std::is_floating_point_v<T>,
int> = 0>
101 static void Handle(T& _value,
const T& _min,
const T& _max)
103 T range = _max - _min;
104 if (range <= 0)
return;
106 T offset = std::fmod(_value - _min, range);
110 _value = _min + offset;
121 template<
typename T,
typename Policy>
125 static_assert(std::is_arithmetic<T>::value,
"RangeNum には数値型を渡してください");
128 static_assert(std::is_base_of<IOutOfRange, Policy>::value,
"Policy は IOutOfRange の派生型でなくてはなりません");
131 static_assert(!std::is_same<IOutOfRange, Policy>::value,
"Policy に IOutOfRange を渡すことはできません");
152 Policy::Handle(_v,
MIN,
MAX);
160 assert(
MIN <=
MAX &&
"RangeNum : MINの値がMAX以上です。");
166 assert(
MIN <=
MAX &&
"RangeNum : MINの値がMAX以上です。");
174 operator T()
const {
return value; }
241 Policy::Handle(_result,
MIN,
MAX);
static void PrintAssertStatic(const std::string _in)
エラー出力用コンソール出力(文字色しか変わらない)
Definition Debug.cpp:152
bool operator>=(const T &_rhs) const
Definition RangeNum.hpp:235
RangeNum operator-(const T &_rhs) const
Definition RangeNum.hpp:188
RangeNum operator*(const T &_rhs) const
Definition RangeNum.hpp:192
bool operator<=(const T &_rhs) const
Definition RangeNum.hpp:233
bool operator<(const T &_rhs) const
Definition RangeNum.hpp:232
void Assign(T &_v)
Definition RangeNum.hpp:150
RangeNum(T min, T max)
Definition RangeNum.hpp:158
bool operator>(const T &_rhs) const
Definition RangeNum.hpp:234
RangeNum(T min, T max, T init)
Definition RangeNum.hpp:164
RangeNum(const RangeNum &other)=default
RangeNum & operator-=(const T &_rhs)
Definition RangeNum.hpp:206
RangeNum & operator*=(const T &_rhs)
Definition RangeNum.hpp:211
bool operator>=(const RangeNum &_rhs) const
Definition RangeNum.hpp:227
int MIN
Definition RangeNum.hpp:142
int value
Definition RangeNum.hpp:137
RangeNum operator+(const T &_rhs) const
Definition RangeNum.hpp:184
RangeNum operator/(const T &_rhs) const
Definition RangeNum.hpp:196
bool operator==(const T &_rhs) const
Definition RangeNum.hpp:230
RangeNum & operator/=(const T &_rhs)
Definition RangeNum.hpp:216
bool operator<=(const RangeNum &_rhs) const
Definition RangeNum.hpp:225
RangeNum operator=(T _rhs)
Definition RangeNum.hpp:176
bool operator<(const RangeNum &_rhs) const
Definition RangeNum.hpp:224
T Checked(T &_result)
Definition RangeNum.hpp:239
RangeNum & operator+=(const T &_rhs)
Definition RangeNum.hpp:201
int MAX
Definition RangeNum.hpp:147
bool operator==(const RangeNum &_rhs) const
Definition RangeNum.hpp:222
bool operator!=(const T &_rhs) const
Definition RangeNum.hpp:231
bool operator>(const RangeNum &_rhs) const
Definition RangeNum.hpp:226
bool operator!=(const RangeNum &_rhs) const
Definition RangeNum.hpp:223
Definition Accessor.hpp:110
範囲外が与えられたら近い範囲内に自動修正
Definition RangeNum.hpp:41
static void Handle(T &_value, const T &_min, const T &_max)
Definition RangeNum.hpp:43
範囲外の入力された値をどのように扱うかを決定するPolicyのベース型
Definition RangeNum.hpp:21
範囲外が与えられたら警告のみ出力
Definition RangeNum.hpp:61
static void Handle(const T &_value, const T &_min, const T &_max)
Definition RangeNum.hpp:63
範囲外が与えられたらループした値に戻す
Definition RangeNum.hpp:77
static void Handle(T &_value, const T &_min, const T &_max)
Definition RangeNum.hpp:80
範囲外が与えられたら即座に終了
Definition RangeNum.hpp:28
static void Handle(const T &_value, const T &_min, const T &_max)
Definition RangeNum.hpp:30