Epic refactoring in progress...

This commit is contained in:
Benoit Blanchon
2014-10-28 16:29:55 +01:00
parent 852256c1af
commit 61218f12fd
13 changed files with 63 additions and 32 deletions

View File

@ -20,12 +20,13 @@ class IndentedPrint;
class JsonArrayConstIterator;
class JsonArrayImpl;
class JsonArrayIterator;
class JsonArrayNode;
class JsonObjectConstIterator;
class JsonObjectImpl;
class JsonObjectIterator;
class JsonObjectConstIterator;
class JsonObjectNode;
class JsonParser;
class JsonValueImpl;
class JsonWriter;
struct JsonArrayNode;
}
}

View File

@ -18,7 +18,7 @@ class JsonArrayImpl {
typedef JsonArrayIterator iterator;
typedef JsonArrayConstIterator const_iterator;
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer) {}
static JsonArrayImpl *createFrom(JsonBuffer *buffer);
int size() const;
@ -37,6 +37,8 @@ class JsonArrayImpl {
const_iterator end() const { return const_iterator(0); }
private:
JsonArrayImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
JsonBuffer *_buffer;
Internals::JsonArrayNode *_firstNode;
};

View File

@ -6,14 +6,24 @@
#pragma once
#include "../JsonValue.hpp"
#include "JsonValueImpl.hpp"
#include "../JsonBuffer.hpp"
namespace ArduinoJson {
namespace Internals {
struct JsonArrayNode {
JsonArrayNode *next;
class JsonArrayNode {
public:
static JsonArrayNode* createFrom(JsonBuffer* buffer) {
void* ptr = buffer->alloc(sizeof(JsonArrayNode));
return ptr ? new (ptr) JsonArrayNode() : NULL;
}
JsonArrayNode* next;
JsonValueImpl value;
private:
JsonArrayNode() : next(0) {}
};
}
}

View File

@ -19,7 +19,7 @@ class JsonObjectImpl {
typedef JsonObjectIterator iterator;
typedef JsonObjectConstIterator const_iterator;
JsonObjectImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
static JsonObjectImpl *createFrom(JsonBuffer *buffer);
int size() const;
@ -38,6 +38,8 @@ class JsonObjectImpl {
void writeTo(JsonWriter &writer) const;
private:
JsonObjectImpl(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
void addNode(JsonObjectNode *nodeToAdd);
void removeNode(JsonObjectNode *nodeToRemove);

View File

@ -7,16 +7,24 @@
#pragma once
#include "JsonValueImpl.hpp"
#include "../JsonBuffer.hpp"
namespace ArduinoJson {
namespace Internals {
struct JsonObjectNode {
JsonObjectNode(const char* k) : key(k) {}
class JsonObjectNode {
public:
static JsonObjectNode* createFrom(JsonBuffer* buffer, const char* key) {
void* ptr = buffer->alloc(sizeof(JsonObjectNode));
return ptr ? new (ptr) JsonObjectNode(key) : NULL;
}
const char* const key;
JsonValueImpl value;
JsonObjectNode* next;
private:
JsonObjectNode(const char* k) : key(k) {}
};
}
}

View File

@ -19,6 +19,8 @@ class JsonValueImpl {
public:
JsonValueImpl() : _type(JSON_UNDEFINED) {}
static JsonValueImpl *createFrom(JsonBuffer *buffer);
void set(bool value) {
_type = JSON_BOOLEAN;
_content.asBoolean = value;

View File

@ -18,7 +18,7 @@ class JsonArray : public JsonPrintable {
typedef Internals::JsonArrayIterator iterator;
typedef Internals::JsonArrayConstIterator const_iterator;
JsonArray() {}
JsonArray() : _impl(NULL) {}
JsonArray(Internals::JsonArrayImpl* impl) : _impl(impl) {}
bool success() const { return _impl; }

View File

@ -35,5 +35,3 @@ class JsonBuffer {
virtual void* alloc(size_t size) = 0;
};
}
void* operator new(size_t size, ArduinoJson::JsonBuffer* buffer);