From fbffadb2cf787129b539f9241c40418f7693e737 Mon Sep 17 00:00:00 2001 From: Benoit Blanchon Date: Thu, 13 Feb 2020 16:54:18 +0100 Subject: [PATCH] Moved nesting decrement logic to class NestingLimit --- .../Deserialization/NestingLimit.hpp | 20 ++++- .../Deserialization/deserialize.hpp | 18 ++--- src/ArduinoJson/Json/JsonDeserializer.hpp | 74 ++++++++----------- .../MsgPack/MsgPackDeserializer.hpp | 60 ++++++++------- 4 files changed, 88 insertions(+), 84 deletions(-) diff --git a/src/ArduinoJson/Deserialization/NestingLimit.hpp b/src/ArduinoJson/Deserialization/NestingLimit.hpp index a5fa4357..8f33b6c7 100644 --- a/src/ArduinoJson/Deserialization/NestingLimit.hpp +++ b/src/ArduinoJson/Deserialization/NestingLimit.hpp @@ -5,13 +5,25 @@ #pragma once #include +#include namespace ARDUINOJSON_NAMESPACE { -struct NestingLimit { - NestingLimit() : value(ARDUINOJSON_DEFAULT_NESTING_LIMIT) {} - explicit NestingLimit(uint8_t n) : value(n) {} +class NestingLimit { + public: + NestingLimit() : _value(ARDUINOJSON_DEFAULT_NESTING_LIMIT) {} + explicit NestingLimit(uint8_t n) : _value(n) {} - uint8_t value; + NestingLimit decrement() const { + ARDUINOJSON_ASSERT(_value > 0); + return NestingLimit(static_cast(_value - 1)); + } + + bool reached() const { + return _value == 0; + } + + private: + uint8_t _value; }; } // namespace ARDUINOJSON_NAMESPACE diff --git a/src/ArduinoJson/Deserialization/deserialize.hpp b/src/ArduinoJson/Deserialization/deserialize.hpp index 98435de9..f80f587b 100644 --- a/src/ArduinoJson/Deserialization/deserialize.hpp +++ b/src/ArduinoJson/Deserialization/deserialize.hpp @@ -15,9 +15,9 @@ namespace ARDUINOJSON_NAMESPACE { template