Stefan Schuermans commited on 2011-11-18 22:27:52
Showing 4 changed files, with 66 additions and 9 deletions.
| ... | ... |
@@ -26,11 +26,11 @@ Position::Position(): |
| 26 | 26 |
bool Position::fromStr(const std::string &str) |
| 27 | 27 |
{
|
| 28 | 28 |
StringParser parser(str); |
| 29 |
- unsigned int x, y; |
|
| 29 |
+ int x, y; |
|
| 30 | 30 |
|
| 31 |
- if (!parser.uintMin(0, x) || |
|
| 31 |
+ if (!parser.sintNo(x) || |
|
| 32 | 32 |
!parser.fixChr(',') ||
|
| 33 |
- !parser.uintMin(0, y)) |
|
| 33 |
+ !parser.sintNo(y)) |
|
| 34 | 34 |
return false; |
| 35 | 35 |
m_x = x; |
| 36 | 36 |
m_y = y; |
| ... | ... |
@@ -32,8 +32,8 @@ public: |
| 32 | 32 |
std::string toStr() const; |
| 33 | 33 |
|
| 34 | 34 |
public: |
| 35 |
- unsigned int m_x; ///< X coordinate within the frame (in pixels) |
|
| 36 |
- unsigned int m_y; ///< Y ccordinate within the frame (in pixels) |
|
| 35 |
+ int m_x; ///< X coordinate within a frame (in pixels) |
|
| 36 |
+ int m_y; ///< Y ccordinate within a frame (in pixels) |
|
| 37 | 37 |
}; // class Position |
| 38 | 38 |
|
| 39 | 39 |
} // namespace Blinker |
| ... | ... |
@@ -33,20 +33,63 @@ bool StringParser::fixChr(char chr) |
| 33 | 33 |
} |
| 34 | 34 |
|
| 35 | 35 |
/** |
| 36 |
- * @brief parse unsigned number and check minimum |
|
| 37 |
- * @param[in] min minimum value to expect |
|
| 36 |
+ * @brief parse unsigned number |
|
| 38 | 37 |
* @param[out] uint number parsed from string |
| 39 | 38 |
* @return if parsing was successful |
| 40 | 39 |
*/ |
| 41 |
-bool StringParser::uintMin(unsigned int min, unsigned int &uint) |
|
| 40 |
+bool StringParser::uintNo(unsigned int &uint) |
|
| 42 | 41 |
{
|
| 42 |
+ bool ret = false; |
|
| 43 | 43 |
uint = 0; |
| 44 | 44 |
while (m_it != m_str.end() && *m_it >= '0' && *m_it <= '9') {
|
| 45 | 45 |
uint *= 10; |
| 46 | 46 |
uint += *m_it - '0'; |
| 47 | 47 |
++m_it; |
| 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 |
+ } |
|
| 48 | 89 |
} |
| 49 |
- return uint >= min; |
|
| 90 |
+ ret = uintNo(uint); |
|
| 91 |
+ sint = sign * uint; |
|
| 92 |
+ return ret; |
|
| 50 | 93 |
} |
| 51 | 94 |
|
| 52 | 95 |
/** |
| ... | ... |
@@ -28,6 +28,13 @@ public: |
| 28 | 28 |
*/ |
| 29 | 29 |
bool fixChr(char chr); |
| 30 | 30 |
|
| 31 |
+ /** |
|
| 32 |
+ * @brief parse unsigned number |
|
| 33 |
+ * @param[out] uint number parsed from string |
|
| 34 |
+ * @return if parsing was successful |
|
| 35 |
+ */ |
|
| 36 |
+ bool uintNo(unsigned int &uint); |
|
| 37 |
+ |
|
| 31 | 38 |
/** |
| 32 | 39 |
* @brief parse unsigned number and check minimum |
| 33 | 40 |
* @param[in] min minimum value to expect |
| ... | ... |
@@ -36,6 +43,13 @@ public: |
| 36 | 43 |
*/ |
| 37 | 44 |
bool uintMin(unsigned int min, unsigned int &uint); |
| 38 | 45 |
|
| 46 |
+ /** |
|
| 47 |
+ * @brief parse signed number |
|
| 48 |
+ * @param[out] sint number parsed from string |
|
| 49 |
+ * @return if parsing was successful |
|
| 50 |
+ */ |
|
| 51 |
+ bool sintNo(int &sint); |
|
| 52 |
+ |
|
| 39 | 53 |
/** |
| 40 | 54 |
* @brief check if parsing is done |
| 41 | 55 |
* @return if parsing is done (i.e. has arrived at the end of the string) |
| 42 | 56 |