Renamed and moved internal files

This commit is contained in:
Benoit Blanchon
2018-11-30 17:53:54 +01:00
parent 04e8acd844
commit aaf0d5c3c5
52 changed files with 1098 additions and 1119 deletions

View File

@@ -0,0 +1,49 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// MIT License
#pragma once
#include "JsonDocument.hpp"
#include <stdlib.h> // malloc, free
namespace ARDUINOJSON_NAMESPACE {
class DynamicJsonDocument : public JsonDocument {
public:
DynamicJsonDocument(size_t capa = ARDUINOJSON_DEFAULT_POOL_SIZE)
: JsonDocument(alloc(capa), addPadding(capa)) {}
DynamicJsonDocument(const DynamicJsonDocument& src)
: JsonDocument(alloc(src.memoryUsage()), addPadding(src.memoryUsage())) {
copy(src);
}
DynamicJsonDocument(const JsonDocument& src)
: JsonDocument(alloc(src.memoryUsage()), addPadding(src.memoryUsage())) {
copy(src);
}
~DynamicJsonDocument() {
free(memoryPool().buffer());
}
DynamicJsonDocument& operator=(const DynamicJsonDocument& src) {
copy(src);
return *this;
}
template <typename T>
DynamicJsonDocument& operator=(const JsonDocument& src) {
copy(src);
return *this;
}
private:
static char* alloc(size_t capa) {
return reinterpret_cast<char*>(malloc(addPadding(capa)));
}
};
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -0,0 +1,84 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// MIT License
#pragma once
#include "../Memory/MemoryPool.hpp"
#include "../Variant/VariantRef.hpp"
#include "../Variant/VariantTo.hpp"
namespace ARDUINOJSON_NAMESPACE {
class JsonDocument : public Visitable {
public:
uint8_t nestingLimit;
template <typename Visitor>
void accept(Visitor& visitor) const {
return getVariant().accept(visitor);
}
template <typename T>
typename VariantAs<T>::type as() {
return getVariant().template as<T>();
}
template <typename T>
typename VariantConstAs<T>::type as() const {
return getVariant().template as<T>();
}
void clear() {
_memoryPool.clear();
_rootData.type = JSON_NULL;
}
template <typename T>
bool is() const {
return getVariant().template is<T>();
}
size_t memoryUsage() const {
return _memoryPool.size();
}
size_t capacity() const {
return _memoryPool.capacity();
}
// for internal use only
MemoryPool& memoryPool() {
return _memoryPool;
}
template <typename T>
typename VariantTo<T>::type to() {
clear();
return getVariant().template to<T>();
}
protected:
JsonDocument(char* buf, size_t capa)
: nestingLimit(ARDUINOJSON_DEFAULT_NESTING_LIMIT),
_memoryPool(buf, capa) {}
void copy(const JsonDocument& src) {
nestingLimit = src.nestingLimit;
to<VariantRef>().set(src.as<VariantRef>());
}
private:
VariantRef getVariant() {
return VariantRef(&_memoryPool, &_rootData);
}
VariantConstRef getVariant() const {
return VariantConstRef(&_rootData);
}
MemoryPool _memoryPool;
VariantData _rootData;
};
} // namespace ARDUINOJSON_NAMESPACE

View File

@@ -0,0 +1,33 @@
// ArduinoJson - arduinojson.org
// Copyright Benoit Blanchon 2014-2018
// MIT License
#pragma once
#include "JsonDocument.hpp"
namespace ARDUINOJSON_NAMESPACE {
template <size_t CAPACITY>
class StaticJsonDocument : public JsonDocument {
static const size_t ACTUAL_CAPACITY =
AddPadding<Max<1, CAPACITY>::value>::value;
public:
StaticJsonDocument() : JsonDocument(_buffer, ACTUAL_CAPACITY) {}
StaticJsonDocument(const JsonDocument& src)
: JsonDocument(_buffer, ACTUAL_CAPACITY) {
copy(src);
}
StaticJsonDocument operator=(const JsonDocument& src) {
copy(src);
return *this;
}
private:
char _buffer[ACTUAL_CAPACITY];
};
} // namespace ARDUINOJSON_NAMESPACE