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 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/core/common/VariantReader.cpp') 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) { -- cgit v1.2.3