744c6a160691faadab42d6dc3bf1cd9201ae25a5
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

1) /* Blinker
2)    Copyright 2011 Stefan Schuermans <stefan@blinkenarea.org>
3)    Copyleft GNU public license - http://www.gnu.org/copyleft/gpl.html
4)    a blinkenarea.org project */
5) 
6) #include <string>
7) 
8) #include "StringParser.h"
9) 
10) namespace Blinker {
11) 
12) /**
13)  * @brief constructor
14)  * @param[in] str string to parse
15)  */
16) StringParser::StringParser(const std::string &str):
17)   m_str(str),
18)   m_it(str.begin())
19) {
20) }
21) 
22) /**
23)  * @brief parse fixed character
24)  * @param[in] chr character to expect
25)  * @return if expected character was found and processed
26)  */
27) bool StringParser::fixChr(char chr)
28) {
29)   if (m_it == m_str.end() || *m_it != chr)
30)     return false;
31)   ++m_it;
32)   return true;
33) }
34) 
35) /**
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

36)  * @brief parse unsigned number
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

37)  * @param[out] uint number parsed from string
38)  * @return if parsing was successful
39)  */
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

40) bool StringParser::uintNo(unsigned int &uint)
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

41) {
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

42)   bool ret = false;
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

43)   uint = 0;
44)   while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
45)     uint *= 10;
46)     uint += *m_it - '0';
47)     ++m_it;
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

48)     ret = true;
49)   }
50)   return ret;
51) }
52) 
53) /**
54)  * @brief parse unsigned number and check minimum
55)  * @param[in] min minimum value to expect
56)  * @param[out] uint number parsed from string
57)  * @return if parsing was successful
58)  */
59) bool StringParser::uintMin(unsigned int min, unsigned int &uint)
60) {
61)   return uintNo(uint) && uint >= min;
62) }
63) 
64) /**
65)  * @brief parse signed number
66)  * @param[out] sint number parsed from string
67)  * @return if parsing was successful
68)  */
69) bool StringParser::sintNo(int &sint)
70) {
71)   int sign;
72)   unsigned int uint;
73)   bool ret;
74)   sint = 0;
75)   if (m_it != m_str.end()) {
76)     switch (*m_it) {
77)       case '+':
78)         sign = 1;
79)         ++m_it;
80)         break;
81)       case '-':
82)         sign = -1;
83)         ++m_it;
84)         break;
85)       default:
86)         sign = 1;
87)         break;
88)     }
Stefan Schuermans classes for format, size an...

Stefan Schuermans authored 12 years ago

89)   }
Stefan Schuermans allow negative coordinates...

Stefan Schuermans authored 12 years ago

90)   ret = uintNo(uint);
91)   sint = sign * uint;
92)   return ret;