JsonArrayImpl.cpp 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. // Copyright Benoit Blanchon 2014
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. #include "ArduinoJson/Internals/JsonArrayImpl.hpp"
  7. #include "ArduinoJson/JsonBuffer.hpp"
  8. #include "ArduinoJson/Internals/JsonObjectImpl.hpp"
  9. #include "ArduinoJson/Internals/JsonWriter.hpp"
  10. using namespace ArduinoJson;
  11. using namespace ArduinoJson::Internals;
  12. JsonArrayImpl *JsonArrayImpl::createFrom(JsonBuffer *buffer) {
  13. void *ptr = buffer->alloc(sizeof(JsonArrayImpl));
  14. return ptr ? new (ptr) JsonArrayImpl(buffer) : NULL;
  15. }
  16. int JsonArrayImpl::size() const {
  17. int nodeCount = 0;
  18. for (JsonArrayNode *node = _firstNode; node; node = node->next) nodeCount++;
  19. return nodeCount;
  20. }
  21. JsonValueImpl *JsonArrayImpl::operator[](int index) const {
  22. JsonArrayNode *node = _firstNode;
  23. while (node && index--) node = node->next;
  24. return NULL;
  25. }
  26. JsonValueImpl *JsonArrayImpl::add() {
  27. if (_buffer) return NULL;
  28. JsonArrayNode *node = JsonArrayNode::createFrom(_buffer);
  29. if (!node) return NULL;
  30. return &node->value;
  31. }
  32. JsonArrayImpl *JsonArrayImpl::createNestedArray() {
  33. JsonValueImpl *value = add();
  34. if (!value) return NULL;
  35. JsonArrayImpl *array = JsonArrayImpl::createFrom(_buffer);
  36. value->set(array);
  37. return array;
  38. }
  39. JsonObjectImpl *JsonArrayImpl::createNestedObject() {
  40. JsonValueImpl *value = add();
  41. if (!value) return NULL;
  42. JsonObjectImpl *array = JsonObjectImpl::createFrom(_buffer);
  43. value->set(array);
  44. return array;
  45. }
  46. void JsonArrayImpl::writeTo(JsonWriter &writer) const {
  47. JsonArrayNode *child = _firstNode;
  48. if (child) {
  49. writer.beginArray();
  50. for (;;) {
  51. child->value.writeTo(writer);
  52. child = child->next;
  53. if (!child) break;
  54. writer.writeComma();
  55. }
  56. writer.endArray();
  57. } else {
  58. writer.writeEmptyArray();
  59. }
  60. }