From 4c8cf263e280bd1e59241b7a783d61e6621a2c5e Mon Sep 17 00:00:00 2001 From: Benjamin Paassen Date: Fri, 13 Feb 2015 11:34:24 +0100 Subject: added VariantReader::parseBool --- src/core/common/VariantReader.cpp | 30 ++++++++++++++++++++++++++++++ src/core/common/VariantReader.hpp | 13 +++++++++++++ 2 files changed, 43 insertions(+) (limited to 'src/core') diff --git a/src/core/common/VariantReader.cpp b/src/core/common/VariantReader.cpp index ef71740..d9e340f 100644 --- a/src/core/common/VariantReader.cpp +++ b/src/core/common/VariantReader.cpp @@ -485,6 +485,36 @@ std::pair VariantReader::parseUnescapedString( return std::make_pair(true, res.str()); } +std::pair VariantReader::parseBool( + CharReader &reader, Logger &logger) +{ + // first we consume all whitespaces. + reader.consumePeek(); + reader.consumeWhitespace(); + // then we try to find the words "true" or "false". + + bool val = false; + CharReaderFork readerFork = reader.fork(); + LoggerFork loggerFork = logger.fork(); + auto res = parseToken(readerFork, loggerFork, {}); + if (res.first) { + bool valid = false; + if (res.second == "true") { + val = true; + valid = true; + } else if (res.second == "false") { + val = false; + valid = true; + } + if (valid) { + readerFork.commit(); + loggerFork.commit(); + return std::make_pair(true, val); + } + } + return std::make_pair(false, val); +} + std::pair VariantReader::parseInteger( CharReader &reader, Logger &logger, const std::unordered_set &delims) { diff --git a/src/core/common/VariantReader.hpp b/src/core/common/VariantReader.hpp index 6b157d8..6a87723 100644 --- a/src/core/common/VariantReader.hpp +++ b/src/core/common/VariantReader.hpp @@ -132,6 +132,19 @@ public: CharReader &reader, Logger &logger, const std::unordered_set &delims); + /** + * Parses a bool from the given CharReader instance (the strings "true" or + * "false"). + * + * @param reader is a reference to the CharReader instance which is + * the source for the character data. The reader will be positioned after + * the bool. + * @param logger is the logger instance that should be used to log error + * messages and warnings. + */ + static std::pair parseBool(CharReader &reader, + Logger &logger); + /** * Parses an integer from the given CharReader instance until one of the * given delimiter characters is reached. -- cgit v1.2.3