| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // Copyright Benoit Blanchon 2014
- // MIT License
- //
- // Arduino JSON library
- // https://github.com/bblanchon/ArduinoJson
- #include "ArduinoJson/JsonArray.hpp"
- #include <new> // required for placement new
- #include "ArduinoJson/JsonBuffer.hpp"
- #include "ArduinoJson/JsonObject.hpp"
- #include "ArduinoJson/Internals/CompactJsonWriter.hpp"
- #include "ArduinoJson/Internals/PrettyJsonWriter.hpp"
- using namespace ArduinoJson;
- using namespace ArduinoJson::Internals;
- JsonArray JsonArray::_invalid(NULL);
- int JsonArray::size() const {
- int nodeCount = 0;
- for (JsonArrayNode *node = _firstNode; node; node = node->next) nodeCount++;
- return nodeCount;
- }
- JsonValue &JsonArray::at(int index) const {
- JsonArrayNode *node = _firstNode;
- while (node && index--) node = node->next;
- return node ? node->value : JsonValue::invalid();
- }
- JsonValue &JsonArray::add() {
- JsonArrayNode *node = createNode();
- if (!node) return JsonValue::invalid();
- addNode(node);
- return node->value;
- }
- JsonArrayNode *JsonArray::createNode() {
- if (!_buffer) return NULL;
- void *ptr = _buffer->alloc(sizeof(JsonArrayNode));
- return ptr ? new (ptr) JsonArrayNode() : NULL;
- }
- void JsonArray::addNode(JsonArrayNode *newNode) {
- if (_firstNode) {
- JsonArrayNode *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();
- add(array);
- return array;
- }
- JsonObject &JsonArray::createNestedObject() {
- if (!_buffer) return JsonObject::invalid();
- JsonObject &object = _buffer->createObject();
- add(object);
- return object;
- }
- template <typename T>
- void JsonArray::writeTo(T &writer) const {
- JsonArrayNode *child = _firstNode;
- if (child) {
- writer.beginArray();
- for (;;) {
- child->value.writeTo(writer);
- child = child->next;
- if (!child) break;
- writer.writeComma();
- }
- writer.endArray();
- } else {
- writer.writeEmptyArray();
- }
- }
- template void JsonArray::writeTo<CompactJsonWriter>(CompactJsonWriter &) const;
- template void JsonArray::writeTo<PrettyJsonWriter>(PrettyJsonWriter &) const;
|