diff options
author | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-11 13:03:55 +0100 |
---|---|---|
committer | Andreas Stöckel <astoecke@techfak.uni-bielefeld.de> | 2015-01-11 13:03:55 +0100 |
commit | 4fe913cbf7163aef49e9de2281331e1c273614b7 (patch) | |
tree | b6bbd743c1f810f23d7c23265af9cb333ccccacc /src/core | |
parent | 7950e05b381308a3beb3c6d1538de6af047e5c0c (diff) |
Made Number class interface better
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/common/Number.cpp | 22 | ||||
-rw-r--r-- | src/core/common/Number.hpp | 21 | ||||
-rw-r--r-- | src/core/common/VariantReader.cpp | 30 |
3 files changed, 37 insertions, 36 deletions
diff --git a/src/core/common/Number.cpp b/src/core/common/Number.cpp index 12f64ae..308a24b 100644 --- a/src/core/common/Number.cpp +++ b/src/core/common/Number.cpp @@ -69,7 +69,7 @@ double Number::doubleValue() int64_t Number::intValue() { return s * a; } bool Number::appendChar(char c, int base, Part p, CharReader &reader, - Logger &logger) + Logger &logger) { // Check whether the given character is valid int v = charValue(c); @@ -100,6 +100,22 @@ bool Number::appendChar(char c, int base, Part p, CharReader &reader, return true; } +/** + * State used in the parser state machine + */ +enum class State { + INIT, + HAS_MINUS, + LEADING_ZERO, + LEADING_POINT, + INT, + HEX, + POINT, + EXP_INIT, + EXP_HAS_MINUS, + EXP +}; + bool Number::parse(CharReader &reader, Logger &logger, const std::unordered_set<char> &delims) { @@ -238,7 +254,8 @@ bool Number::parse(const std::string &str, Logger &logger) return parse(reader, logger); } -bool Number::parseFixedLenInt(CharReader &reader, int len, int base, Logger &logger) +bool Number::parseFixedLengthInteger(CharReader &reader, int len, int base, + Logger &logger) { char c; reader.consumePeek(); @@ -254,6 +271,5 @@ bool Number::parseFixedLenInt(CharReader &reader, int len, int base, Logger &log } return true; } - } diff --git a/src/core/common/Number.hpp b/src/core/common/Number.hpp index 89a689e..23db42e 100644 --- a/src/core/common/Number.hpp +++ b/src/core/common/Number.hpp @@ -45,22 +45,6 @@ class Logger; class Number { private: /** - * State used in the parser state machine - */ - enum class State { - INIT, - HAS_MINUS, - LEADING_ZERO, - LEADING_POINT, - INT, - HEX, - POINT, - EXP_INIT, - EXP_HAS_MINUS, - EXP - }; - - /** * Reprsents the part of the number: Base value a, nominator n, exponent e. */ enum class Part { A, N, E }; @@ -155,7 +139,7 @@ public: bool parse(const std::string &str, Logger &logger); /** - * Parses a number with a fixed length and the given base. + * Parses an integer with a fixed length and the given base. * * @param reader is a reference at the char reader from which the number * should be read. @@ -163,8 +147,9 @@ public: * @param base is the base of the number. * @param logger is the logger instance to which error messages should be * written. + * @return true if parsing was successful, false otherwise. */ - bool parseFixedLenInt(CharReader &reader, int len, int base, + bool parseFixedLengthInteger(CharReader &reader, int len, int base, Logger &logger); }; } diff --git a/src/core/common/VariantReader.cpp b/src/core/common/VariantReader.cpp index 904713e..faad40c 100644 --- a/src/core/common/VariantReader.cpp +++ b/src/core/common/VariantReader.cpp @@ -374,21 +374,21 @@ std::pair<bool, std::string> VariantReader::parseString( case 'x': { // Parse Latin-1 sequence \xXX Number n; - hadError = - !(n.parseFixedLenInt(reader, 2, 16, logger) && - encodeUtf8(res, reader, logger, n.intValue(), - true)) || - hadError; + hadError = !(n.parseFixedLengthInteger(reader, 2, 16, + logger) && + encodeUtf8(res, reader, logger, + n.intValue(), true)) || + hadError; break; } case 'u': { // Parse Unicode sequence \uXXXX Number n; - hadError = - !(n.parseFixedLenInt(reader, 4, 16, logger) && - encodeUtf8(res, reader, logger, n.intValue(), - false)) || - hadError; + hadError = !(n.parseFixedLengthInteger(reader, 4, 16, + logger) && + encodeUtf8(res, reader, logger, + n.intValue(), false)) || + hadError; break; } default: @@ -396,11 +396,11 @@ std::pair<bool, std::string> VariantReader::parseString( // Parse Latin-1 sequence \000 reader.resetPeek(); Number n; - hadError = - !(n.parseFixedLenInt(reader, 3, 8, logger) && - encodeUtf8(res, reader, logger, n.intValue(), - true)) || - hadError; + hadError = !(n.parseFixedLengthInteger(reader, 3, 8, + logger) && + encodeUtf8(res, reader, logger, + n.intValue(), true)) || + hadError; } else { logger.error(ERR_INVALID_ESCAPE, reader); hadError = true; |