forked from bblanchon/ArduinoJson
Removed virtuals from JsonWriter hierarchy
This commit is contained in:
@ -15,14 +15,14 @@ class CompactJsonWriter : public JsonWriter {
|
|||||||
public:
|
public:
|
||||||
explicit CompactJsonWriter(Print *sink) : JsonWriter(sink) {}
|
explicit CompactJsonWriter(Print *sink) : JsonWriter(sink) {}
|
||||||
|
|
||||||
virtual void beginArray() { _length += _sink->write('['); }
|
void beginArray() { _length += _sink->write('['); }
|
||||||
virtual void endArray() { _length += _sink->write(']'); }
|
void endArray() { _length += _sink->write(']'); }
|
||||||
|
|
||||||
virtual void beginObject() { _length += _sink->write('{'); }
|
void beginObject() { _length += _sink->write('{'); }
|
||||||
virtual void endObject() { _length += _sink->write('}'); }
|
void endObject() { _length += _sink->write('}'); }
|
||||||
|
|
||||||
virtual void writeColon() { _length += _sink->write(':'); }
|
void writeColon() { _length += _sink->write(':'); }
|
||||||
virtual void writeComma() { _length += _sink->write(','); }
|
void writeComma() { _length += _sink->write(','); }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,12 +17,8 @@ class JsonWriter {
|
|||||||
|
|
||||||
size_t bytesWritten() { return _length; }
|
size_t bytesWritten() { return _length; }
|
||||||
|
|
||||||
virtual void beginArray() = 0;
|
|
||||||
virtual void endArray() = 0;
|
|
||||||
void writeEmptyArray() { _length += _sink->print("[]"); }
|
void writeEmptyArray() { _length += _sink->print("[]"); }
|
||||||
|
|
||||||
virtual void beginObject() = 0;
|
|
||||||
virtual void endObject() = 0;
|
|
||||||
void writeEmptyObject() { _length += _sink->print("{}"); }
|
void writeEmptyObject() { _length += _sink->print("{}"); }
|
||||||
|
|
||||||
void writeString(const char *value);
|
void writeString(const char *value);
|
||||||
@ -30,9 +26,6 @@ class JsonWriter {
|
|||||||
void writeBoolean(bool value);
|
void writeBoolean(bool value);
|
||||||
void writeDouble(double value, int decimals);
|
void writeDouble(double value, int decimals);
|
||||||
|
|
||||||
virtual void writeColon() = 0;
|
|
||||||
virtual void writeComma() = 0;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
Print *_sink;
|
Print *_sink;
|
||||||
size_t _length;
|
size_t _length;
|
||||||
|
@ -17,29 +17,29 @@ class PrettyJsonWriter : public JsonWriter {
|
|||||||
explicit PrettyJsonWriter(IndentedPrint *sink)
|
explicit PrettyJsonWriter(IndentedPrint *sink)
|
||||||
: JsonWriter(sink), _indenter(sink) {}
|
: JsonWriter(sink), _indenter(sink) {}
|
||||||
|
|
||||||
virtual void beginArray() {
|
void beginArray() {
|
||||||
_length += _sink->write('[');
|
_length += _sink->write('[');
|
||||||
indent();
|
indent();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void endArray() {
|
void endArray() {
|
||||||
unindent();
|
unindent();
|
||||||
_length += _sink->write(']');
|
_length += _sink->write(']');
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void writeColon() { _length += _sink->print(": "); }
|
void writeColon() { _length += _sink->print(": "); }
|
||||||
|
|
||||||
virtual void writeComma() {
|
void writeComma() {
|
||||||
_length += _sink->write(',');
|
_length += _sink->write(',');
|
||||||
_length += _indenter->println();
|
_length += _indenter->println();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void beginObject() {
|
void beginObject() {
|
||||||
_length += _sink->write('{');
|
_length += _sink->write('{');
|
||||||
indent();
|
indent();
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void endObject() {
|
void endObject() {
|
||||||
unindent();
|
unindent();
|
||||||
_length += _sink->write('}');
|
_length += _sink->write('}');
|
||||||
}
|
}
|
||||||
|
@ -9,18 +9,16 @@
|
|||||||
#include "Arduino/Printable.hpp"
|
#include "Arduino/Printable.hpp"
|
||||||
#include "Internals/StringBuilder.hpp"
|
#include "Internals/StringBuilder.hpp"
|
||||||
#include "Internals/IndentedPrint.hpp"
|
#include "Internals/IndentedPrint.hpp"
|
||||||
|
#include "Internals/CompactJsonWriter.hpp"
|
||||||
|
#include "Internals/PrettyJsonWriter.hpp"
|
||||||
|
|
||||||
namespace ArduinoJson {
|
namespace ArduinoJson {
|
||||||
|
|
||||||
namespace Internals {
|
|
||||||
class IndentedPrint;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class JsonPrintable : public Printable {
|
class JsonPrintable : public Printable {
|
||||||
public:
|
public:
|
||||||
size_t printTo(Print &print) const {
|
size_t printTo(Print &print) const {
|
||||||
CompactJsonWriter writer(&p);
|
Internals::CompactJsonWriter writer(&print);
|
||||||
downcast().writeTo(writer);
|
downcast().writeTo(writer);
|
||||||
return writer.bytesWritten();
|
return writer.bytesWritten();
|
||||||
}
|
}
|
||||||
@ -30,7 +28,7 @@ class JsonPrintable : public Printable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
size_t prettyPrintTo(Internals::IndentedPrint &print) const {
|
size_t prettyPrintTo(Internals::IndentedPrint &print) const {
|
||||||
PrettyJsonWriter writer(&p);
|
Internals::PrettyJsonWriter writer(&print);
|
||||||
downcast().writeTo(writer);
|
downcast().writeTo(writer);
|
||||||
return writer.bytesWritten();
|
return writer.bytesWritten();
|
||||||
}
|
}
|
||||||
@ -45,6 +43,6 @@ class JsonPrintable : public Printable {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const T &downcast() { return *static_cast<const T *>(this); }
|
const T &downcast() const { return *static_cast<const T *>(this); }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -7,7 +7,8 @@
|
|||||||
#include "ArduinoJson/JsonValue.hpp"
|
#include "ArduinoJson/JsonValue.hpp"
|
||||||
#include "ArduinoJson/JsonArray.hpp"
|
#include "ArduinoJson/JsonArray.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;
|
||||||
@ -74,7 +75,8 @@ void JsonValue::set(JsonObject &object) {
|
|||||||
_content.asObject = &object;
|
_content.asObject = &object;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JsonValue::writeTo(JsonWriter &writer) const {
|
template <typename T>
|
||||||
|
void JsonValue::writeTo(T &writer) const {
|
||||||
switch (_type) {
|
switch (_type) {
|
||||||
case JSON_ARRAY:
|
case JSON_ARRAY:
|
||||||
_content.asArray->writeTo(writer);
|
_content.asArray->writeTo(writer);
|
||||||
@ -101,3 +103,6 @@ void JsonValue::writeTo(JsonWriter &writer) const {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template void JsonValue::writeTo<CompactJsonWriter>(CompactJsonWriter &) const;
|
||||||
|
template void JsonValue::writeTo<PrettyJsonWriter>(PrettyJsonWriter &) const;
|
||||||
|
@ -30,7 +30,8 @@ class Issue10 : public testing::Test {
|
|||||||
persons[1] = employee;
|
persons[1] = employee;
|
||||||
}
|
}
|
||||||
|
|
||||||
void checkJsonString(JsonPrintable &p) {
|
template <typename T>
|
||||||
|
void checkJsonString(const T &p) {
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
p.printTo(buffer, sizeof(buffer));
|
p.printTo(buffer, sizeof(buffer));
|
||||||
|
|
||||||
@ -38,7 +39,7 @@ class Issue10 : public testing::Test {
|
|||||||
buffer);
|
buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
StaticJsonBuffer<JSON_ARRAY_SIZE(2)+2*JSON_OBJECT_SIZE(2)> json;
|
StaticJsonBuffer<JSON_ARRAY_SIZE(2) + 2 * JSON_OBJECT_SIZE(2)> json;
|
||||||
Person persons[2];
|
Person persons[2];
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -51,7 +52,7 @@ TEST_F(Issue10, PopulateArrayByAddingAnObject) {
|
|||||||
object["id"] = persons[i].id;
|
object["id"] = persons[i].id;
|
||||||
object["name"] = persons[i].name;
|
object["name"] = persons[i].name;
|
||||||
|
|
||||||
array.add(object);
|
array.add(object);
|
||||||
}
|
}
|
||||||
|
|
||||||
checkJsonString(array);
|
checkJsonString(array);
|
||||||
|
Reference in New Issue
Block a user