// ArduinoJson - arduinojson.org // Copyright Benoit Blanchon 2014-2018 // MIT License #pragma once #include "JsonVariant.hpp" #include "Memory/StaticMemoryPool.hpp" namespace ArduinoJson { template class StaticJsonDocument { public: uint8_t nestingLimit; StaticJsonDocument() : nestingLimit(ARDUINOJSON_DEFAULT_NESTING_LIMIT) {} Internals::StaticMemoryPoolBase& memoryPool() { return _memoryPool; } template bool is() const { return getVariant().template is(); } template typename Internals::JsonVariantAs::type as() const { return getVariant().template as(); } // JsonObject to() template typename Internals::enable_if::value, JsonObject>::type to() { clear(); JsonObject object(&_memoryPool); getVariant().set(object); return object; } // JsonArray to() template typename Internals::enable_if::value, JsonArray>::type to() { clear(); JsonArray array(&_memoryPool); getVariant().set(array); return array; } // JsonVariant to() template typename Internals::enable_if::value, JsonVariant>::type to() { clear(); return getVariant(); } // JsonVariantData& to() template typename Internals::enable_if< Internals::is_same::value, Internals::JsonVariantData&>::type to() { clear(); return _rootData; } void clear() { _memoryPool.clear(); _rootData.setNull(); } size_t memoryUsage() const { return _memoryPool.size(); } template void visit(Visitor& visitor) const { return getVariant().visit(visitor); } private: JsonVariant getVariant() const { return JsonVariant(&_memoryPool, &_rootData); } mutable Internals::StaticMemoryPool _memoryPool; mutable Internals::JsonVariantData _rootData; }; } // namespace ArduinoJson