47 #ifndef _MIRA_FROMSTRING_H_ 48 #define _MIRA_FROMSTRING_H_ 50 #include <boost/algorithm/string/predicate.hpp> 51 #include <boost/algorithm/string/trim.hpp> 70 inline T genericFromString(
const std::string& str)
72 auto trimmed = boost::algorithm::trim_copy(str);
75 return boost::lexical_cast<T>(trimmed);
77 catch (boost::bad_lexical_cast &e) {
78 MIRA_THROW(XIO,
"Failed to convert value from string '" << str <<
"': " << e.what());
84 inline T fpFromString(
const std::string& str)
87 return genericFromString<T>(str);
90 return std::numeric_limits<T>::quiet_NaN();
92 return std::numeric_limits<T>::infinity();
94 return -std::numeric_limits<T>::infinity();
101 template <
typename T>
102 inline T charFromString(
const std::string& str)
104 int val = genericFromString<int>(str);
106 if(val>std::numeric_limits<T>::max())
107 MIRA_THROW(XIO,
"Overflow while converting value from string '" <<
108 str <<
"', max: " << (
int)std::numeric_limits<T>::max());
109 if(val<std::numeric_limits<T>::min())
110 MIRA_THROW(XIO,
"Underflow while converting value from string '" <<
111 str <<
"', min: " << (
int)std::numeric_limits<T>::min());
113 return static_cast<T
>(val);
130 template <
typename T>
134 operator T()
const {
return value; }
137 iStream >> std::hex >> oValue.
value;
150 template <
typename T>
154 operator T()
const {
return value; }
157 iStream >> std::oct >> oValue.
value;
173 template <
typename T>
176 return Private::genericFromString<T>(str);
183 return Private::charFromString<char>(str);
190 return Private::charFromString<signed char>(str);
197 return Private::charFromString<unsigned char>(str);
202 inline std::string fromString<std::string>(
const std::string& str)
211 return Private::fpFromString<float>(str);
218 return Private::fpFromString<double>(str);
225 return Private::fpFromString<long double>(str);
232 auto trimmed = boost::algorithm::trim_copy(str);
235 if (boost::iequals(trimmed,
"true"))
238 if (!boost::iequals(trimmed,
"false"))
239 MIRA_THROW(XIO,
"Failed to convert bool value from string '" << str <<
"'");
Can be used with fromString to convert hex strings into numbers.
Definition: FromString.h:131
signed char fromString< signed char >(const std::string &str)
Specialization for signed char.
Definition: FromString.h:188
T value
Definition: FromString.h:141
Includes often needed math headers and methods and provides additional constants. ...
T fromString(const std::string &str)
Converts a string to any data type that supports the stream >> operator.
Definition: FromString.h:174
specialize cv::DataType for our ImgPixel and inherit from cv::DataType<Vec>
Definition: IOService.h:67
friend std::istream & operator>>(std::istream &iStream, FromOct< T > &oValue)
Definition: FromString.h:155
float fromString< float >(const std::string &str)
Specialization for float.
Definition: FromString.h:209
Can be used with fromString to convert oct strings into numbers.
Definition: FromString.h:151
#define MIRA_THROW(ex, msg)
Macro for throwing an exception.
Definition: Exception.h:78
Definitions used by fromString/toString conversion.
static constexpr auto MIRA_TOSTRING_POSITIVE_INF
Definition: FromToStringConstants.h:55
Commonly used exception classes.
char fromString< char >(const std::string &str)
Specialization for char.
Definition: FromString.h:181
T value
Definition: FromString.h:161
static constexpr auto MIRA_TOSTRING_NEGATIVE_INF
Definition: FromToStringConstants.h:56
unsigned char fromString< unsigned char >(const std::string &str)
Specialization for unsigned char.
Definition: FromString.h:195
double fromString< double >(const std::string &str)
Specialization for double.
Definition: FromString.h:216
friend std::istream & operator>>(std::istream &iStream, FromHex< T > &oValue)
Definition: FromString.h:135
static constexpr auto MIRA_TOSTRING_NAN
Definition: FromToStringConstants.h:54
bool fromString< bool >(const std::string &str)
Specialization for bool.
Definition: FromString.h:230
long double fromString< long double >(const std::string &str)
Specialization for long double.
Definition: FromString.h:223