forked from bblanchon/ArduinoJson
Removing virtual methods...
This commit is contained in:
@ -19,7 +19,8 @@ namespace ArduinoJson {
|
|||||||
class JsonObject;
|
class JsonObject;
|
||||||
class JsonBuffer;
|
class JsonBuffer;
|
||||||
|
|
||||||
class JsonArray : public JsonPrintable, public Internals::ReferenceType {
|
class JsonArray : public JsonPrintable<JsonArray>,
|
||||||
|
public Internals::ReferenceType {
|
||||||
friend class JsonBuffer;
|
friend class JsonBuffer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -55,7 +56,8 @@ class JsonArray : public JsonPrintable, public Internals::ReferenceType {
|
|||||||
|
|
||||||
static JsonArray &invalid() { return _invalid; }
|
static JsonArray &invalid() { return _invalid; }
|
||||||
|
|
||||||
virtual void writeTo(Internals::JsonWriter &writer) const;
|
template <typename T>
|
||||||
|
void writeTo(T &writer) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// constructor is private: instance must be created via a JsonBuffer
|
// constructor is private: instance must be created via a JsonBuffer
|
||||||
|
@ -20,7 +20,8 @@ namespace ArduinoJson {
|
|||||||
class JsonArray;
|
class JsonArray;
|
||||||
class JsonBuffer;
|
class JsonBuffer;
|
||||||
|
|
||||||
class JsonObject : public JsonPrintable, public Internals::ReferenceType {
|
class JsonObject : public JsonPrintable<JsonObject>,
|
||||||
|
public Internals::ReferenceType {
|
||||||
friend class JsonBuffer;
|
friend class JsonBuffer;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
@ -55,7 +56,8 @@ class JsonObject : public JsonPrintable, public Internals::ReferenceType {
|
|||||||
|
|
||||||
static JsonObject &invalid() { return _invalid; }
|
static JsonObject &invalid() { return _invalid; }
|
||||||
|
|
||||||
virtual void writeTo(Internals::JsonWriter &writer) const;
|
template <typename T>
|
||||||
|
void writeTo(T &writer) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
// constructor is private, instance must be created via JsonBuffer
|
// constructor is private, instance must be created via JsonBuffer
|
||||||
|
@ -7,24 +7,44 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "Arduino/Printable.hpp"
|
#include "Arduino/Printable.hpp"
|
||||||
|
#include "Internals/StringBuilder.hpp"
|
||||||
|
#include "Internals/IndentedPrint.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
namespace Internals {
|
namespace Internals {
|
||||||
class IndentedPrint;
|
class IndentedPrint;
|
||||||
class JsonWriter;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
class JsonPrintable : public Printable {
|
class JsonPrintable : public Printable {
|
||||||
public:
|
public:
|
||||||
size_t printTo(char *buffer, size_t bufferSize) const;
|
size_t printTo(Print &print) const {
|
||||||
virtual size_t printTo(Print &print) const;
|
CompactJsonWriter writer(&p);
|
||||||
|
downcast().writeTo(writer);
|
||||||
|
return writer.bytesWritten();
|
||||||
|
}
|
||||||
|
size_t printTo(char *buffer, size_t bufferSize) const {
|
||||||
|
Internals::StringBuilder sb(buffer, bufferSize);
|
||||||
|
return printTo(sb);
|
||||||
|
}
|
||||||
|
|
||||||
size_t prettyPrintTo(char *buffer, size_t bufferSize) const;
|
size_t prettyPrintTo(Internals::IndentedPrint &print) const {
|
||||||
size_t prettyPrintTo(Internals::IndentedPrint &print) const;
|
PrettyJsonWriter writer(&p);
|
||||||
size_t prettyPrintTo(Print &print) const;
|
downcast().writeTo(writer);
|
||||||
|
return writer.bytesWritten();
|
||||||
|
}
|
||||||
|
|
||||||
protected:
|
size_t prettyPrintTo(char *buffer, size_t bufferSize) const {
|
||||||
virtual void writeTo(Internals::JsonWriter &) const = 0;
|
Internals::StringBuilder sb(buffer, bufferSize);
|
||||||
|
return prettyPrintTo(sb);
|
||||||
|
}
|
||||||
|
size_t prettyPrintTo(Print &print) const {
|
||||||
|
Internals::IndentedPrint indentedPrint = Internals::IndentedPrint(print);
|
||||||
|
return prettyPrintTo(indentedPrint);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
const T &downcast() { return *static_cast<const T *>(this); }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -68,7 +68,8 @@ class JsonValue {
|
|||||||
|
|
||||||
bool success() { return _type != Internals::JSON_INVALID; }
|
bool success() { return _type != Internals::JSON_INVALID; }
|
||||||
|
|
||||||
void writeTo(Internals::JsonWriter &writer) const;
|
template <typename T>
|
||||||
|
void writeTo(T &writer) const;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
JsonValue(Internals::JsonValueType type) : _type(type) {}
|
JsonValue(Internals::JsonValueType type) : _type(type) {}
|
||||||
|
@ -10,7 +10,8 @@
|
|||||||
|
|
||||||
#include "ArduinoJson/JsonBuffer.hpp"
|
#include "ArduinoJson/JsonBuffer.hpp"
|
||||||
#include "ArduinoJson/JsonObject.hpp"
|
#include "ArduinoJson/JsonObject.hpp"
|
||||||
#include "ArduinoJson/Internals/JsonWriter.hpp"
|
#include "ArduinoJson/Internals/CompactJsonWriter.hpp"
|
||||||
|
#include "ArduinoJson/Internals/PrettyJsonWriter.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
using namespace ArduinoJson::Internals;
|
using namespace ArduinoJson::Internals;
|
||||||
@ -68,7 +69,8 @@ JsonObject &JsonArray::createNestedObject() {
|
|||||||
return object;
|
return object;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonArray::writeTo(JsonWriter &writer) const {
|
template <typename T>
|
||||||
|
void JsonArray::writeTo(T &writer) const {
|
||||||
JsonArrayNode *child = _firstNode;
|
JsonArrayNode *child = _firstNode;
|
||||||
|
|
||||||
if (child) {
|
if (child) {
|
||||||
@ -88,3 +90,6 @@ void JsonArray::writeTo(JsonWriter &writer) const {
|
|||||||
writer.writeEmptyArray();
|
writer.writeEmptyArray();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template void JsonArray::writeTo<CompactJsonWriter>(CompactJsonWriter &) const;
|
||||||
|
template void JsonArray::writeTo<PrettyJsonWriter>(PrettyJsonWriter &) const;
|
@ -12,7 +12,8 @@
|
|||||||
#include "ArduinoJson/JsonBuffer.hpp"
|
#include "ArduinoJson/JsonBuffer.hpp"
|
||||||
#include "ArduinoJson/JsonArray.hpp"
|
#include "ArduinoJson/JsonArray.hpp"
|
||||||
#include "ArduinoJson/JsonValue.hpp"
|
#include "ArduinoJson/JsonValue.hpp"
|
||||||
#include "ArduinoJson/Internals/JsonWriter.hpp"
|
#include "ArduinoJson/Internals/CompactJsonWriter.hpp"
|
||||||
|
#include "ArduinoJson/Internals/PrettyJsonWriter.hpp"
|
||||||
#include "ArduinoJson/Internals/StringBuilder.hpp"
|
#include "ArduinoJson/Internals/StringBuilder.hpp"
|
||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
@ -91,7 +92,8 @@ void JsonObject::removeNode(JsonObjectNode *nodeToRemove) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonObject::writeTo(JsonWriter &writer) const {
|
template <typename T>
|
||||||
|
void JsonObject::writeTo(T &writer) const {
|
||||||
JsonObjectNode *node = _firstNode;
|
JsonObjectNode *node = _firstNode;
|
||||||
|
|
||||||
if (node) {
|
if (node) {
|
||||||
@ -113,3 +115,6 @@ void JsonObject::writeTo(JsonWriter &writer) const {
|
|||||||
writer.writeEmptyObject();
|
writer.writeEmptyObject();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template void JsonObject::writeTo(CompactJsonWriter &writer) const;
|
||||||
|
template void JsonObject::writeTo(PrettyJsonWriter &writer) const;
|
||||||
|
@ -13,30 +13,3 @@
|
|||||||
|
|
||||||
using namespace ArduinoJson;
|
using namespace ArduinoJson;
|
||||||
using namespace ArduinoJson::Internals;
|
using namespace ArduinoJson::Internals;
|
||||||
|
|
||||||
size_t JsonPrintable::printTo(char *buffer, size_t bufferSize) const {
|
|
||||||
StringBuilder sb(buffer, bufferSize);
|
|
||||||
return printTo(sb);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonPrintable::printTo(Print &p) const {
|
|
||||||
CompactJsonWriter writer(&p);
|
|
||||||
writeTo(writer);
|
|
||||||
return writer.bytesWritten();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonPrintable::prettyPrintTo(char *buffer, size_t bufferSize) const {
|
|
||||||
StringBuilder sb(buffer, bufferSize);
|
|
||||||
return prettyPrintTo(sb);
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonPrintable::prettyPrintTo(IndentedPrint &p) const {
|
|
||||||
PrettyJsonWriter writer(&p);
|
|
||||||
writeTo(writer);
|
|
||||||
return writer.bytesWritten();
|
|
||||||
}
|
|
||||||
|
|
||||||
size_t JsonPrintable::prettyPrintTo(Print &print) const {
|
|
||||||
IndentedPrint indentedPrint = IndentedPrint(print);
|
|
||||||
return prettyPrintTo(indentedPrint);
|
|
||||||
}
|
|
||||||
|
Reference in New Issue
Block a user