diff --git a/include/ArduinoJson/Internals/List.hpp b/include/ArduinoJson/Internals/List.hpp index 36631b86..8cf5a75b 100644 --- a/include/ArduinoJson/Internals/List.hpp +++ b/include/ArduinoJson/Internals/List.hpp @@ -34,6 +34,8 @@ class List { protected: node_type *createNode(); + void addNode(node_type *node); + void removeNode(node_type *nodeToRemove); JsonBuffer *_buffer; node_type *_firstNode; diff --git a/include/ArduinoJson/Internals/Node.hpp b/include/ArduinoJson/Internals/Node.hpp index 0b81d367..2bd47ad0 100644 --- a/include/ArduinoJson/Internals/Node.hpp +++ b/include/ArduinoJson/Internals/Node.hpp @@ -15,8 +15,8 @@ template struct Node { Node() : next(NULL) {} - T content; Node* next; + T content; }; } } diff --git a/include/ArduinoJson/JsonArray.hpp b/include/ArduinoJson/JsonArray.hpp index 3b24389c..dc2fd8e1 100644 --- a/include/ArduinoJson/JsonArray.hpp +++ b/include/ArduinoJson/JsonArray.hpp @@ -50,8 +50,6 @@ class JsonArray : public Internals::JsonPrintable, // constructor is private: instance must be created via a JsonBuffer JsonArray(JsonBuffer *buffer) : List(buffer) {} - inline void addNode(node_type *node); - static JsonArray _invalid; }; } diff --git a/include/ArduinoJson/JsonObject.hpp b/include/ArduinoJson/JsonObject.hpp index 4d94cd56..8750e55c 100644 --- a/include/ArduinoJson/JsonObject.hpp +++ b/include/ArduinoJson/JsonObject.hpp @@ -55,8 +55,6 @@ class JsonObject : public Internals::JsonPrintable, JsonObject(JsonBuffer *buffer) : List(buffer) {} JsonVariant &add(key_type key) { return (*this)[key]; } - void addNode(node_type *nodeToAdd); - void removeNode(node_type *nodeToRemove); node_type *getNodeAt(key_type key) const; node_type *getOrCreateNodeAt(key_type key); diff --git a/src/Internals/List.cpp b/src/Internals/List.cpp index 07a06284..8c46b69d 100644 --- a/src/Internals/List.cpp +++ b/src/Internals/List.cpp @@ -21,11 +21,33 @@ int List::size() const { } template -Node *List::createNode() { +typename List::node_type *List::createNode() { if (!_buffer) return NULL; void *ptr = _buffer->alloc(sizeof(node_type)); return ptr ? new (ptr) node_type() : NULL; } +template +void List::addNode(node_type *nodeToAdd) { + if (_firstNode) { + node_type *lastNode = _firstNode; + while (lastNode->next) lastNode = lastNode->next; + lastNode->next = nodeToAdd; + } else { + _firstNode = nodeToAdd; + } +} + +template +void List::removeNode(node_type *nodeToRemove) { + if (!nodeToRemove) return; + if (nodeToRemove == _firstNode) { + _firstNode = nodeToRemove->next; + } else { + for (node_type *node = _firstNode; node; node = node->next) + if (node->next == nodeToRemove) node->next = nodeToRemove->next; + } +} + template class List; template class List; \ No newline at end of file diff --git a/src/JsonArray.cpp b/src/JsonArray.cpp index 33970b2e..7e65b405 100644 --- a/src/JsonArray.cpp +++ b/src/JsonArray.cpp @@ -30,16 +30,6 @@ JsonVariant &JsonArray::add() { return node->content; } -void JsonArray::addNode(node_type *newNode) { - if (_firstNode) { - node_type *lastNode = _firstNode; - while (lastNode->next) lastNode = lastNode->next; - lastNode->next = newNode; - } else { - _firstNode = newNode; - } -} - JsonArray &JsonArray::createNestedArray() { if (!_buffer) return JsonArray::invalid(); JsonArray &array = _buffer->createArray(); diff --git a/src/JsonObject.cpp b/src/JsonObject.cpp index de8667f3..c2a527a8 100644 --- a/src/JsonObject.cpp +++ b/src/JsonObject.cpp @@ -69,26 +69,6 @@ JsonObject::node_type *JsonObject::getOrCreateNodeAt(const char *key) { return newNode; } -void JsonObject::addNode(node_type *nodeToAdd) { - if (!_firstNode) { - _firstNode = nodeToAdd; - } else { - node_type *lastNode = _firstNode; - while (lastNode->next) lastNode = lastNode->next; - lastNode->next = nodeToAdd; - } -} - -void JsonObject::removeNode(node_type *nodeToRemove) { - if (!nodeToRemove) return; - if (nodeToRemove == _firstNode) { - _firstNode = nodeToRemove->next; - } else { - for (node_type *node = _firstNode; node; node = node->next) - if (node->next == nodeToRemove) node->next = nodeToRemove->next; - } -} - template void JsonObject::writeTo(T &writer) const { node_type *node = _firstNode;