268b924b761c4b589b2695354c073d7f2a01f46d
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp   1) /* Blinker
Stefan Schuermans update copyright header

Stefan Schuermans authored 5 years ago

src/common/StringParser.cpp   2)    Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp   3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
src/noarch/StringParser.cpp   4)    a blinkenarea.org project */
src/noarch/StringParser.cpp   5) 
Stefan Schuermans implement frame rate limiter

Stefan Schuermans authored 10 years ago

src/noarch/StringParser.cpp   6) #include <math.h>
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp   7) #include <string>
src/noarch/StringParser.cpp   8) 
src/noarch/StringParser.cpp   9) #include "StringParser.h"
src/noarch/StringParser.cpp  10) 
src/noarch/StringParser.cpp  11) namespace Blinker {
src/noarch/StringParser.cpp  12) 
src/noarch/StringParser.cpp  13) /**
src/noarch/StringParser.cpp  14)  * @brief constructor
src/noarch/StringParser.cpp  15)  * @param[in] str string to parse
src/noarch/StringParser.cpp  16)  */
src/noarch/StringParser.cpp  17) StringParser::StringParser(const std::string &str):
src/noarch/StringParser.cpp  18)   m_str(str),
Stefan Schuermans fixed end of string check i...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  19)   m_it(m_str.begin())
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  20) {
src/noarch/StringParser.cpp  21) }
src/noarch/StringParser.cpp  22) 
src/noarch/StringParser.cpp  23) /**
src/noarch/StringParser.cpp  24)  * @brief parse fixed character
src/noarch/StringParser.cpp  25)  * @param[in] chr character to expect
src/noarch/StringParser.cpp  26)  * @return if expected character was found and processed
src/noarch/StringParser.cpp  27)  */
src/noarch/StringParser.cpp  28) bool StringParser::fixChr(char chr)
src/noarch/StringParser.cpp  29) {
src/noarch/StringParser.cpp  30)   if (m_it == m_str.end() || *m_it != chr)
src/noarch/StringParser.cpp  31)     return false;
src/noarch/StringParser.cpp  32)   ++m_it;
src/noarch/StringParser.cpp  33)   return true;
src/noarch/StringParser.cpp  34) }
src/noarch/StringParser.cpp  35) 
Stefan Schuermans fixed end of string check i...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  36) /**
Stefan Schuermans extend string parser to all...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  37)  * @brief parse one character out of a set
Stefan Schuermans fixed end of string check i...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  38)  * @param[in] set set of characters allowed
src/noarch/StringParser.cpp  39)  * @param[out] chr character parsed
src/noarch/StringParser.cpp  40)  * @return if a character from the set was found and processed
src/noarch/StringParser.cpp  41)  */
src/noarch/StringParser.cpp  42) bool StringParser::oneChrOf(const std::string &set, char &chr)
src/noarch/StringParser.cpp  43) {
src/noarch/StringParser.cpp  44)   if (m_it == m_str.end() || set.find(*m_it) == std::string::npos)
src/noarch/StringParser.cpp  45)     return false;
src/noarch/StringParser.cpp  46)   chr = *m_it;
src/noarch/StringParser.cpp  47)   ++m_it;
src/noarch/StringParser.cpp  48)   return true;
src/noarch/StringParser.cpp  49) }
src/noarch/StringParser.cpp  50) 
Stefan Schuermans implemented setting file fo...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  51) /**
src/noarch/StringParser.cpp  52)  * @brief parse boolean value
src/noarch/StringParser.cpp  53)  * @param[out] boolVal boolean value parsed from string
src/noarch/StringParser.cpp  54)  * @return if parsing was successful
src/noarch/StringParser.cpp  55)  */
src/noarch/StringParser.cpp  56) bool StringParser::boolVal(bool &boolVal)
src/noarch/StringParser.cpp  57) {
src/noarch/StringParser.cpp  58)   if (m_it == m_str.end())
src/noarch/StringParser.cpp  59)     return false;
src/noarch/StringParser.cpp  60)   if (*m_it == '0') {
src/noarch/StringParser.cpp  61)     boolVal = false;
src/noarch/StringParser.cpp  62)     return true;
src/noarch/StringParser.cpp  63)   }
src/noarch/StringParser.cpp  64)   if (*m_it == '1') {
src/noarch/StringParser.cpp  65)     boolVal = true;
src/noarch/StringParser.cpp  66)     return true;
src/noarch/StringParser.cpp  67)   }
src/noarch/StringParser.cpp  68)   if (*m_it == 'f') {
src/noarch/StringParser.cpp  69)     boolVal = false;
src/noarch/StringParser.cpp  70)     const char *ptr = "false";
src/noarch/StringParser.cpp  71)     while (m_it != m_str.end() && *ptr && *m_it == *ptr)
src/noarch/StringParser.cpp  72)       ++m_it, ++ptr;
src/noarch/StringParser.cpp  73)     return !*ptr;
src/noarch/StringParser.cpp  74)   }
src/noarch/StringParser.cpp  75)   if (*m_it == 't') {
src/noarch/StringParser.cpp  76)     boolVal = true;
src/noarch/StringParser.cpp  77)     const char *ptr = "true";
src/noarch/StringParser.cpp  78)     while (m_it != m_str.end() && *ptr && *m_it == *ptr)
src/noarch/StringParser.cpp  79)       ++m_it, ++ptr;
src/noarch/StringParser.cpp  80)     return !*ptr;
src/noarch/StringParser.cpp  81)   }
src/noarch/StringParser.cpp  82)   return false;
src/noarch/StringParser.cpp  83) }
src/noarch/StringParser.cpp  84) 
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  85) /**
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  86)  * @brief parse unsigned number
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  87)  * @param[out] uint number parsed from string
src/noarch/StringParser.cpp  88)  * @return if parsing was successful
src/noarch/StringParser.cpp  89)  */
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  90) bool StringParser::uintNo(unsigned int &uint)
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  91) {
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  92)   bool ret = false;
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  93)   uint = 0;
src/noarch/StringParser.cpp  94)   while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp  95)     uint *= 10;
src/noarch/StringParser.cpp  96)     uint += *m_it - '0';
src/noarch/StringParser.cpp  97)     ++m_it;
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp  98)     ret = true;
src/noarch/StringParser.cpp  99)   }
src/noarch/StringParser.cpp 100)   return ret;
src/noarch/StringParser.cpp 101) }
src/noarch/StringParser.cpp 102) 
src/noarch/StringParser.cpp 103) /**
src/noarch/StringParser.cpp 104)  * @brief parse unsigned number and check minimum
src/noarch/StringParser.cpp 105)  * @param[in] min minimum value to expect
src/noarch/StringParser.cpp 106)  * @param[out] uint number parsed from string
src/noarch/StringParser.cpp 107)  * @return if parsing was successful
src/noarch/StringParser.cpp 108)  */
src/noarch/StringParser.cpp 109) bool StringParser::uintMin(unsigned int min, unsigned int &uint)
src/noarch/StringParser.cpp 110) {
src/noarch/StringParser.cpp 111)   return uintNo(uint) && uint >= min;
src/noarch/StringParser.cpp 112) }
src/noarch/StringParser.cpp 113) 
Stefan Schuermans parse hex value from string

Stefan Schuermans authored 5 years ago

src/common/StringParser.cpp 114) /**
src/common/StringParser.cpp 115)  * @brief parse hexadecimal number
src/common/StringParser.cpp 116)  * @param[in] digits number of digits to parse
src/common/StringParser.cpp 117)  * @param[out] uint number parsed from string
src/common/StringParser.cpp 118)  * @return if parsing was successful
src/common/StringParser.cpp 119)  */
src/common/StringParser.cpp 120) bool StringParser::uintHex(unsigned int digits, unsigned int &uint)
src/common/StringParser.cpp 121) {
src/common/StringParser.cpp 122)   uint = 0;
src/common/StringParser.cpp 123)   for (; digits > 0; --digits) {
src/common/StringParser.cpp 124)     if (m_it == m_str.end()) {
src/common/StringParser.cpp 125)       return false;
src/common/StringParser.cpp 126)     }
src/common/StringParser.cpp 127)     char chr = *m_it;
src/common/StringParser.cpp 128)     ++m_it;
src/common/StringParser.cpp 129)     uint <<= 4;
src/common/StringParser.cpp 130)     if (chr >= '0' && chr <= '9') {
src/common/StringParser.cpp 131)       uint |= chr - '0';
src/common/StringParser.cpp 132)     } else if (chr >= 'A' && chr <= 'F') {
src/common/StringParser.cpp 133)       uint |= chr - 'A' + 10;
src/common/StringParser.cpp 134)     } else if (chr >= 'a' && chr <= 'f') {
src/common/StringParser.cpp 135)       uint |= chr - 'a' + 10;
src/common/StringParser.cpp 136)     } else {
src/common/StringParser.cpp 137)       return false;
src/common/StringParser.cpp 138)     }
src/common/StringParser.cpp 139)   }
src/common/StringParser.cpp 140)   return true;
src/common/StringParser.cpp 141) }
src/common/StringParser.cpp 142) 
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 143) /**
src/noarch/StringParser.cpp 144)  * @brief parse signed number
src/noarch/StringParser.cpp 145)  * @param[out] sint number parsed from string
src/noarch/StringParser.cpp 146)  * @return if parsing was successful
src/noarch/StringParser.cpp 147)  */
src/noarch/StringParser.cpp 148) bool StringParser::sintNo(int &sint)
src/noarch/StringParser.cpp 149) {
Stefan Schuermans implement frame rate limiter

Stefan Schuermans authored 10 years ago

src/noarch/StringParser.cpp 150)   int sign = 1;
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 151)   unsigned int uint;
src/noarch/StringParser.cpp 152)   bool ret;
src/noarch/StringParser.cpp 153)   sint = 0;
src/noarch/StringParser.cpp 154)   if (m_it != m_str.end()) {
src/noarch/StringParser.cpp 155)     switch (*m_it) {
src/noarch/StringParser.cpp 156)       case '+':
src/noarch/StringParser.cpp 157)         sign = 1;
src/noarch/StringParser.cpp 158)         ++m_it;
src/noarch/StringParser.cpp 159)         break;
src/noarch/StringParser.cpp 160)       case '-':
src/noarch/StringParser.cpp 161)         sign = -1;
src/noarch/StringParser.cpp 162)         ++m_it;
src/noarch/StringParser.cpp 163)         break;
src/noarch/StringParser.cpp 164)     }
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 165)   }
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 166)   ret = uintNo(uint);
src/noarch/StringParser.cpp 167)   sint = sign * uint;
src/noarch/StringParser.cpp 168)   return ret;
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 169) }
src/noarch/StringParser.cpp 170) 
Stefan Schuermans implement frame rate limiter

Stefan Schuermans authored 10 years ago

src/noarch/StringParser.cpp 171) /**
src/noarch/StringParser.cpp 172)  * @brief parse floating point value
src/noarch/StringParser.cpp 173)  * @param[out] fl floating point value parsed from string
src/noarch/StringParser.cpp 174)  * @return if parsing was successful
src/noarch/StringParser.cpp 175)  */
src/noarch/StringParser.cpp 176) bool StringParser::floatVal(float &fl)
src/noarch/StringParser.cpp 177) {
src/noarch/StringParser.cpp 178)   /* parse float manually to accept floats with dot as decimal separator for
src/noarch/StringParser.cpp 179)    * all locales */
src/noarch/StringParser.cpp 180)   int sign = 1, exp_sign = 1;
src/noarch/StringParser.cpp 181)   float val = 0.0f, frac_val = 0.1f, exp_val = 0.0f;
src/noarch/StringParser.cpp 182)   bool ret = false;
src/noarch/StringParser.cpp 183)   // sign
src/noarch/StringParser.cpp 184)   if (m_it != m_str.end()) {
src/noarch/StringParser.cpp 185)     switch (*m_it) {
src/noarch/StringParser.cpp 186)       case '+':
src/noarch/StringParser.cpp 187)         sign = 1.0f;
src/noarch/StringParser.cpp 188)         ++m_it;
src/noarch/StringParser.cpp 189)         break;
src/noarch/StringParser.cpp 190)       case '-':
src/noarch/StringParser.cpp 191)         sign = -1.0f;
src/noarch/StringParser.cpp 192)         ++m_it;
src/noarch/StringParser.cpp 193)         break;
src/noarch/StringParser.cpp 194)     }
src/noarch/StringParser.cpp 195)   }
src/noarch/StringParser.cpp 196)   // digits before decimal pdot
src/noarch/StringParser.cpp 197)   while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp 198)     val *= 10.0f;
src/noarch/StringParser.cpp 199)     val += *m_it - '0';
src/noarch/StringParser.cpp 200)     ++m_it;
src/noarch/StringParser.cpp 201)     ret = true;
src/noarch/StringParser.cpp 202)   }
src/noarch/StringParser.cpp 203)   // decimal dot
src/noarch/StringParser.cpp 204)   if (m_it != m_str.end() && *m_it == '.') {
src/noarch/StringParser.cpp 205)     ++m_it;
src/noarch/StringParser.cpp 206)     ret = true;
src/noarch/StringParser.cpp 207)     // digits after decimal dot
src/noarch/StringParser.cpp 208)     while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp 209)       val += (*m_it - '0') * frac_val;
src/noarch/StringParser.cpp 210)       ++m_it;
src/noarch/StringParser.cpp 211)       frac_val *= 0.1f;
src/noarch/StringParser.cpp 212)     }
src/noarch/StringParser.cpp 213)   }
src/noarch/StringParser.cpp 214)   // exponent
src/noarch/StringParser.cpp 215)   if (m_it != m_str.end() && (*m_it == 'e' || *m_it == 'E')) {
src/noarch/StringParser.cpp 216)     ++m_it;
src/noarch/StringParser.cpp 217)     // exponent sign
src/noarch/StringParser.cpp 218)     if (m_it != m_str.end()) {
src/noarch/StringParser.cpp 219)       switch (*m_it) {
src/noarch/StringParser.cpp 220)         case '+':
src/noarch/StringParser.cpp 221)           exp_sign = 1.0f;
src/noarch/StringParser.cpp 222)           ++m_it;
src/noarch/StringParser.cpp 223)           break;
src/noarch/StringParser.cpp 224)         case '-':
src/noarch/StringParser.cpp 225)           exp_sign = -1.0f;
src/noarch/StringParser.cpp 226)           ++m_it;
src/noarch/StringParser.cpp 227)           break;
src/noarch/StringParser.cpp 228)       }
src/noarch/StringParser.cpp 229)     }
src/noarch/StringParser.cpp 230)     // exponent digits
src/noarch/StringParser.cpp 231)     while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp 232)       exp_val *= 10.0f;
src/noarch/StringParser.cpp 233)       exp_val += *m_it - '0';
src/noarch/StringParser.cpp 234)       ++m_it;
src/noarch/StringParser.cpp 235)     }
src/noarch/StringParser.cpp 236)   }
src/noarch/StringParser.cpp 237)   fl = sign * val * pow(10.0, exp_sign * exp_val);
src/noarch/StringParser.cpp 238)   return ret;
src/noarch/StringParser.cpp 239) }
src/noarch/StringParser.cpp 240) 
Stefan Schuermans extend string parser to all...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 241) /**
src/noarch/StringParser.cpp 242)  * @brief parse until a delimiter is found
src/noarch/StringParser.cpp 243)  * @param[in] delim set of delimiter characters
src/noarch/StringParser.cpp 244)  * @param[in] empty if empty substring is okay
src/noarch/StringParser.cpp 245)  * @param[out] str substring parsed
src/noarch/StringParser.cpp 246)  * @return if a substring was found and processed
src/noarch/StringParser.cpp 247)  */
src/noarch/StringParser.cpp 248) bool StringParser::untilDelim(const std::string &delim, bool empty,
src/noarch/StringParser.cpp 249)                               std::string &str)
src/noarch/StringParser.cpp 250) {
src/noarch/StringParser.cpp 251)   str.clear();
Stefan Schuermans fix end condition in parse...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 252)   while (m_it != m_str.end() && delim.find(*m_it) == std::string::npos) {
Stefan Schuermans extend string parser to all...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 253)     str += *m_it;
src/noarch/StringParser.cpp 254)     ++m_it;
src/noarch/StringParser.cpp 255)   }
src/noarch/StringParser.cpp 256)   return empty || !str.empty();
src/noarch/StringParser.cpp 257) }
src/noarch/StringParser.cpp 258)