15 template<
typename Value_>
34 template<
typename Value_2_>
41 template<
typename Value_2_>
43 min_(Value_(range.
Min())),
44 max_(Value_(range.
Max())) {
64 void Set(std::pair<Value_, Value_>
const pair) {
81 if (min > min_)
return;
82 if (min == Value_(0))
return;
87 if (max < max_)
return;
108 return value > min_ && value < max_;
112 return value < min_ || value > max_;
115 template<
typename Value_2_>
117 if (Value_(value) >
Max()) value =
Max();
118 if (Value_(value) <
Min()) value =
Min();
130 operator bool()
const {
131 return min_ != InitialMin() && max_ != InitialMax();
134 template<
typename Value_2_>
136 return {
Min()* scalar,
Max()* scalar};
139 template<
typename Value_2_>
141 return range.
Scale(scalar);
144 template<
typename Value_2_>
146 return range.
Scale(1. / scalar);
150 if (min_ != Value_(0)) min_ = std::log10(min_);
151 if (max_ != Value_(0)) max_ = std::log10(max_);
164 void ImposeHierachy() {
165 if (min_ != InitialMin() && max_ != InitialMax() && min_ > max_) std::swap(min_, max_);
167 Value_ InitialMin()
const {
170 Value_ InitialMax()
const {
171 return std::numeric_limits<Value_>::lowest();
178 template <
typename Value_>
181 auto minmax = std::minmax_element(vector.begin(), vector.end());
182 return {*minmax.first, *minmax.second};
185 template <
typename Iterator_,
typename Value_>
188 auto minmax = std::minmax_element(begin, end);
189 return {*minmax.first, *minmax.second};
friend auto & operator<<(std::ostream &stream, Range const &range)
Output stream operator.
Definition: Range.hh:157
Range between two values.
Definition: Range.hh:16
Value_ Min() const
Definition: Range.hh:91
Range< Value_ > MinMax(std::vector< Value_ > const &vector)
Definition: Range.hh:179
void Set(std::pair< Value_, Value_ > const pair)
Definition: Range.hh:64
double CeilToDigits(double value, int digits=2)
Ceiling to digits.
Definition: Math.cpp:28
std::string Stream(Value const &message, int width=20, bool right=false)
Definition: Debug.hh:48
bool Outside(Value_ value) const
Definition: Range.hh:111
void Widen(double factor)
Definition: Range.hh:75
Range< ValueProduct< Value_, Value_2_ > > Scale(Value_2_ const &scalar) const
Definition: Range.hh:135
Value_ Max() const
Definition: Range.hh:95
Value_ Floor() const
Definition: Range.hh:99
double FloorToDigits(double value, int digits=2)
Floor value to digits.
Definition: Math.cpp:22
Range(Value_2_ min, Value_2_ max)
Definition: Range.hh:35
Range(Range< Value_2_ > const &range)
Definition: Range.hh:42
Value_ Constrain(Value_2_ value)
Definition: Range.hh:116
Value_ Ceil() const
Definition: Range.hh:103
Range()
Definition: Range.hh:19
Value_ Length() const
Definition: Range.hh:122
void Widen(Range< Value_ > const &bound)
Definition: Range.hh:70
Boosted Collider Analysis.
Definition: Analysis.hh:15
friend Range< ValueProduct< Value_, Value_2_ > > operator*(Range const &range, Value_2_ const &scalar)
Definition: Range.hh:140
void Log()
Definition: Range.hh:149
void SetMin(Value_ min)
Definition: Range.hh:48
Range(Value_ min, Value_ max)
Definition: Range.hh:24
Value max(Value const &value_1, Value const &value_2)
Maximal value.
Definition: Units.hh:260
bool Inside(Value_ value) const
Definition: Range.hh:107
void SetMax(Value_ max)
Definition: Range.hh:53
void WidenMin(Value_ min)
Definition: Range.hh:80
friend Range< ValueQuotient< Value_, Value_2_ > > operator/(Range const &range, Value_2_ const &scalar)
Definition: Range.hh:145
Value_ Sum() const
Definition: Range.hh:126
void WidenMax(Value_ max)
Definition: Range.hh:86
Range(Value_ degenerate)
Definition: Range.hh:30
void Set(Value_ min, Value_ max)
Definition: Range.hh:58