16 #include "../base/assert.h" 17 #include "../base/vector.h" 29 Range() : lower(
std::numeric_limits<T>::min()), upper(
std::numeric_limits<T>::max()) { ; }
35 size_t CalcBin(T value,
size_t num_bins)
const {
36 return (
size_t) (((double) (value - lower)) / ((
double) (upper - lower)) * (double) num_bins);
40 bool operator==(
const Range& _in)
const {
return lower==_in.lower && upper==_in.upper; }
41 bool operator!=(
const Range& _in)
const {
return lower!=_in.lower || upper!=_in.upper; }
51 bool Valid(T value)
const {
return value >= lower && value <= upper; }
54 T
Limit(T _in)
const {
return (_in < lower) ? lower : ((_in > upper) ? upper : _in); }
62 T range = upper - lower;
63 for (
size_t i = 1; i < s; i++) {
64 out[i] = lower + (T) ((((
double) i) / (
double)(s-1)) * range);
Range< double > DRange(double _l, double _u)
Build a new range of type double.
Definition: Range.h:78
bool operator!=(const Range &_in) const
Definition: Range.h:41
void SetUpper(T u)
Definition: Range.h:44
Range & operator=(const Range &)=default
void SetMaxUpper()
Definition: Range.h:48
Definition: BitVector.h:785
size_t CalcBin(T value, size_t num_bins) const
Definition: Range.h:35
T Limit(T _in) const
Force a value into range.
Definition: Range.h:54
A range of values from a lower limit to and upper limit, of any provided type.
Definition: Range.h:23
Range(T _l, T _u)
Definition: Range.h:30
bool operator==(const Range &_in) const
Definition: Range.h:40
T GetLower() const
Definition: Range.h:32
Range< int > IntRange(int _l, int _u)
Build a new range of type int.
Definition: Range.h:75
void SetMaxLower()
Definition: Range.h:47
If we are in emscripten, make sure to include the header.
Definition: array.h:37
#define emp_assert(...)
Definition: assert.h:199
void SetLower(T l)
Definition: Range.h:43
Range< T > MakeRange(T _l, T _u)
Build a new range with auto-detected type.
Definition: Range.h:72
emp::vector< T > Spread(size_t s) const
Produce a vector that spreads values evenly across the range.
Definition: Range.h:57
T GetUpper() const
Definition: Range.h:33
void Set(T _l, T _u)
Definition: Range.h:45
Range()
Definition: Range.h:29
bool Valid(T value) const
Determine if a provided value is in the range.
Definition: Range.h:51