classes for format, size an...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 1) /* Blinker
|
update copyright header
Stefan Schuermans authored 5 years ago
|
src/common/StringParser.cpp 2) Copyright 2011-2019 Stefan Schuermans <stefan@blinkenarea.org>
|
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)
|
implement frame rate limiter
Stefan Schuermans authored 10 years ago
|
src/noarch/StringParser.cpp 6) #include <math.h>
|
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),
|
fixed end of string check i...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 19) m_it(m_str.begin())
|
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)
|
fixed end of string check i...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 36) /**
|
extend string parser to all...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 37) * @brief parse one character out of a set
|
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)
|
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)
|
classes for format, size an...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 85) /**
|
allow negative coordinates...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 86) * @brief parse unsigned number
|
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) */
|
allow negative coordinates...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 90) bool StringParser::uintNo(unsigned int &uint)
|
classes for format, size an...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 91) {
|
allow negative coordinates...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 92) bool ret = false;
|
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;
|
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)
|
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)
|
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) {
|
implement frame rate limiter
Stefan Schuermans authored 10 years ago
|
src/noarch/StringParser.cpp 150) int sign = 1;
|
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) }
|
classes for format, size an...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 165) }
|
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;
|
classes for format, size an...
Stefan Schuermans authored 12 years ago
|
src/noarch/StringParser.cpp 169) }
src/noarch/StringParser.cpp 170)
|
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)
|
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();
|
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) {
|
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)
|