JsonContainer.cpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. #include "JsonContainer.h"
  2. #include "JsonBuffer.h"
  3. #include "Internals/JsonNodeSerializer.h"
  4. #include "Internals/StringBuilder.h"
  5. size_t JsonContainer::printTo(char* buffer, size_t bufferSize) const
  6. {
  7. ArduinoJson::Internals::StringBuilder sb(buffer, bufferSize);
  8. return printTo(sb);
  9. }
  10. size_t JsonContainer::printTo(Print& p) const
  11. {
  12. JsonNodeSerializer serializer(p);
  13. return serializer.serialize(_node);
  14. }
  15. JsonNode* JsonContainer::createNode(JsonNodeType type)
  16. {
  17. JsonBuffer* buffer = _node->content.asContainer.buffer;
  18. return buffer->createNode(JSON_UNDEFINED);
  19. }
  20. bool JsonContainer::checkNodeType(JsonNodeType expectedType)
  21. {
  22. return _node && _node->type == expectedType;
  23. }
  24. bool JsonContainer::operator==(const JsonContainer & other) const
  25. {
  26. return _node == other._node;
  27. }
  28. void JsonContainer::addChild(JsonNode* newChild)
  29. {
  30. JsonNode* lastChild = _node->content.asContainer.child;
  31. if (!lastChild)
  32. {
  33. _node->content.asContainer.child = newChild = newChild;
  34. return;
  35. }
  36. while (lastChild->next)
  37. lastChild = lastChild->next;
  38. lastChild->next = newChild;
  39. }
  40. void JsonContainer::removeChildAfter(JsonNode* child, JsonNode* previous)
  41. {
  42. if (previous)
  43. previous->next = child->next;
  44. else
  45. _node->content.asContainer.child = child->next;
  46. }
  47. size_t JsonContainer::size() const
  48. {
  49. int size = 0;
  50. for (JsonNodeIterator it = beginChildren(); it != endChildren(); ++it)
  51. {
  52. size++;
  53. }
  54. return size;
  55. }