58 template <
class T>
inline 64 template <
class T>
inline 66 itsMin(mini), itsMax(maxi)
68 if (itsMax < itsMin) std::swap(itsMin, itsMax);
72 template <
class T>
template <
class U>
inline 79 template <
class T>
inline 84 template <
class T>
inline 89 template <
class T>
inline 91 {
return (itsMax == itsMin); }
95 template <
class T>
inline 98 if (itsMax < val) itsMax = val;
99 if (val < itsMin) itsMin = val;
103 template <
class T>
inline 105 {
return (val >= itsMin && val <= itsMax); }
110 template <
class T>
inline 117 template <
class T>
inline 118 std::ostream & jevois::operator<<(std::ostream & out, jevois::Range<T>
const & r)
119 {
return out <<
'[' << r.min() <<
" ... " << r.max() <<
']'; }
122 template <
class T>
inline 125 char c;
do { in >> c; }
while (std::isspace(c));
126 if (c !=
'[')
throw std::range_error(
"Error parsing Range: missing '['");
127 T mi; in >> mi;
if (in.fail())
throw std::range_error(
"Error parsing Range: bad min");
128 do { in >> c; }
while (std::isspace(c));
129 for (
int i = 0; i < 3; ++i)
131 if (c !=
'.')
throw std::range_error(
"Error parsing Range: missing '...'");
134 T ma; in >> ma;
if (in.fail())
throw std::range_error(
"Error parsing Range: bad max");
135 do { in >> c; }
while (std::isspace(c));
136 if (c !=
']')
throw std::range_error(
"Error parsing Range: missing ']'");
144 template <
class T>
inline 150 result = mi +
"..." + ma;
154 template <
class T>
inline 157 std::vector<std::string> splitVec =
jevois::split(valstring,
"\\.\\.\\.");
159 if (splitVec.size() != 2)
throw std::range_error(
"Error parsing Range from [" + valstring +
"]: missing '...'");
162 try { jevois::paramStringToVal<T>(splitVec[0], mi); }
163 catch (...) {
throw std::range_error(
"Error parsing Range from [" + valstring +
"]: invalid min value"); }
165 try { jevois::paramStringToVal<T>(splitVec[1], ma); }
166 catch (...) {
throw std::range_error(
"Error parsing Range from [" + valstring +
"]: invalid max value"); }
172 template <
class T>
inline 174 {
return (range1.
min() == range2.
min()) && (range1.
max() == range2.
max()); }
177 template <
class T>
inline 179 {
return (range1.
min() != range2.
min()) || (range1.
max() != range2.
max()); }
182 template <
class T>
inline 187 template <
class T>
inline 192 template <
class T>
inline 197 template <
class T>
inline 202 template <
class T>
inline 207 template <
class T>
inline 212 template <
class T>
inline 217 template <
class T>
inline 222 template <
class T>
inline 227 template <
class T>
inline 232 template <
class T>
inline 237 template <
class T>
inline void paramStringToVal(std::string const &valstring, T &result)
Machine-readable conversion from string to T, for use in jevois::Parameter.
dest_type clamped_convert(source_type source)
Clamped numerical conversion.
bool empty() const
Return whether min() == max()
void paramValToString(T const &val, std::string &result)
Machine-readable conversion of T to a string, for use in jevois::Parameter.
T const & max() const
Return the maximum value.
Range()
Default constructor, range is [0 .. 0].
T const & min() const
Return the minimum value.
void extend(T const val)
Extend the range, if needed, so that it includes val.
bool contains(T const &val) const
Return true if val is within [min ... max].
std::vector< std::string > split(std::string const &input, std::string const ®ex="\+")
Split string into vector of tokens using a regex to specify what to split on; default regex splits by...