362c1f4c3b5ce9e3fce11167a51fbe4cdb2174de
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) 
src/noarch/StringParser.cpp 114) /**
src/noarch/StringParser.cpp 115)  * @brief parse signed number
src/noarch/StringParser.cpp 116)  * @param[out] sint number parsed from string
src/noarch/StringParser.cpp 117)  * @return if parsing was successful
src/noarch/StringParser.cpp 118)  */
src/noarch/StringParser.cpp 119) bool StringParser::sintNo(int &sint)
src/noarch/StringParser.cpp 120) {
Stefan Schuermans implement frame rate limiter

Stefan Schuermans authored 10 years ago

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

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 122)   unsigned int uint;
src/noarch/StringParser.cpp 123)   bool ret;
src/noarch/StringParser.cpp 124)   sint = 0;
src/noarch/StringParser.cpp 125)   if (m_it != m_str.end()) {
src/noarch/StringParser.cpp 126)     switch (*m_it) {
src/noarch/StringParser.cpp 127)       case '+':
src/noarch/StringParser.cpp 128)         sign = 1;
src/noarch/StringParser.cpp 129)         ++m_it;
src/noarch/StringParser.cpp 130)         break;
src/noarch/StringParser.cpp 131)       case '-':
src/noarch/StringParser.cpp 132)         sign = -1;
src/noarch/StringParser.cpp 133)         ++m_it;
src/noarch/StringParser.cpp 134)         break;
src/noarch/StringParser.cpp 135)     }
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

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

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 140) }
src/noarch/StringParser.cpp 141) 
Stefan Schuermans implement frame rate limiter

Stefan Schuermans authored 10 years ago

src/noarch/StringParser.cpp 142) /**
src/noarch/StringParser.cpp 143)  * @brief parse floating point value
src/noarch/StringParser.cpp 144)  * @param[out] fl floating point value parsed from string
src/noarch/StringParser.cpp 145)  * @return if parsing was successful
src/noarch/StringParser.cpp 146)  */
src/noarch/StringParser.cpp 147) bool StringParser::floatVal(float &fl)
src/noarch/StringParser.cpp 148) {
src/noarch/StringParser.cpp 149)   /* parse float manually to accept floats with dot as decimal separator for
src/noarch/StringParser.cpp 150)    * all locales */
src/noarch/StringParser.cpp 151)   int sign = 1, exp_sign = 1;
src/noarch/StringParser.cpp 152)   float val = 0.0f, frac_val = 0.1f, exp_val = 0.0f;
src/noarch/StringParser.cpp 153)   bool ret = false;
src/noarch/StringParser.cpp 154)   // sign
src/noarch/StringParser.cpp 155)   if (m_it != m_str.end()) {
src/noarch/StringParser.cpp 156)     switch (*m_it) {
src/noarch/StringParser.cpp 157)       case '+':
src/noarch/StringParser.cpp 158)         sign = 1.0f;
src/noarch/StringParser.cpp 159)         ++m_it;
src/noarch/StringParser.cpp 160)         break;
src/noarch/StringParser.cpp 161)       case '-':
src/noarch/StringParser.cpp 162)         sign = -1.0f;
src/noarch/StringParser.cpp 163)         ++m_it;
src/noarch/StringParser.cpp 164)         break;
src/noarch/StringParser.cpp 165)     }
src/noarch/StringParser.cpp 166)   }
src/noarch/StringParser.cpp 167)   // digits before decimal pdot
src/noarch/StringParser.cpp 168)   while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp 169)     val *= 10.0f;
src/noarch/StringParser.cpp 170)     val += *m_it - '0';
src/noarch/StringParser.cpp 171)     ++m_it;
src/noarch/StringParser.cpp 172)     ret = true;
src/noarch/StringParser.cpp 173)   }
src/noarch/StringParser.cpp 174)   // decimal dot
src/noarch/StringParser.cpp 175)   if (m_it != m_str.end() && *m_it == '.') {
src/noarch/StringParser.cpp 176)     ++m_it;
src/noarch/StringParser.cpp 177)     ret = true;
src/noarch/StringParser.cpp 178)     // digits after decimal dot
src/noarch/StringParser.cpp 179)     while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp 180)       val += (*m_it - '0') * frac_val;
src/noarch/StringParser.cpp 181)       ++m_it;
src/noarch/StringParser.cpp 182)       frac_val *= 0.1f;
src/noarch/StringParser.cpp 183)     }
src/noarch/StringParser.cpp 184)   }
src/noarch/StringParser.cpp 185)   // exponent
src/noarch/StringParser.cpp 186)   if (m_it != m_str.end() && (*m_it == 'e' || *m_it == 'E')) {
src/noarch/StringParser.cpp 187)     ++m_it;
src/noarch/StringParser.cpp 188)     // exponent sign
src/noarch/StringParser.cpp 189)     if (m_it != m_str.end()) {
src/noarch/StringParser.cpp 190)       switch (*m_it) {
src/noarch/StringParser.cpp 191)         case '+':
src/noarch/StringParser.cpp 192)           exp_sign = 1.0f;
src/noarch/StringParser.cpp 193)           ++m_it;
src/noarch/StringParser.cpp 194)           break;
src/noarch/StringParser.cpp 195)         case '-':
src/noarch/StringParser.cpp 196)           exp_sign = -1.0f;
src/noarch/StringParser.cpp 197)           ++m_it;
src/noarch/StringParser.cpp 198)           break;
src/noarch/StringParser.cpp 199)       }
src/noarch/StringParser.cpp 200)     }
src/noarch/StringParser.cpp 201)     // exponent digits
src/noarch/StringParser.cpp 202)     while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
src/noarch/StringParser.cpp 203)       exp_val *= 10.0f;
src/noarch/StringParser.cpp 204)       exp_val += *m_it - '0';
src/noarch/StringParser.cpp 205)       ++m_it;
src/noarch/StringParser.cpp 206)     }
src/noarch/StringParser.cpp 207)   }
src/noarch/StringParser.cpp 208)   fl = sign * val * pow(10.0, exp_sign * exp_val);
src/noarch/StringParser.cpp 209)   return ret;
src/noarch/StringParser.cpp 210) }
src/noarch/StringParser.cpp 211) 
Stefan Schuermans extend string parser to all...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 212) /**
src/noarch/StringParser.cpp 213)  * @brief parse until a delimiter is found
src/noarch/StringParser.cpp 214)  * @param[in] delim set of delimiter characters
src/noarch/StringParser.cpp 215)  * @param[in] empty if empty substring is okay
src/noarch/StringParser.cpp 216)  * @param[out] str substring parsed
src/noarch/StringParser.cpp 217)  * @return if a substring was found and processed
src/noarch/StringParser.cpp 218)  */
src/noarch/StringParser.cpp 219) bool StringParser::untilDelim(const std::string &delim, bool empty,
src/noarch/StringParser.cpp 220)                               std::string &str)
src/noarch/StringParser.cpp 221) {
src/noarch/StringParser.cpp 222)   str.clear();
Stefan Schuermans fix end condition in parse...

Stefan Schuermans authored 12 years ago

src/noarch/StringParser.cpp 223)   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 224)     str += *m_it;
src/noarch/StringParser.cpp 225)     ++m_it;
src/noarch/StringParser.cpp 226)   }
src/noarch/StringParser.cpp 227)   return empty || !str.empty();
src/noarch/StringParser.cpp 228) }
src/noarch/StringParser.cpp 229)