JsonArray.hpp 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. // Copyright Benoit Blanchon 2014
  2. // MIT License
  3. //
  4. // Arduino JSON library
  5. // https://github.com/bblanchon/ArduinoJson
  6. #pragma once
  7. #include "ForwardDeclarations.hpp"
  8. #include "JsonArrayIterator.hpp"
  9. #include "JsonArrayConstIterator.hpp"
  10. #include "JsonPrintable.hpp"
  11. #include "JsonObject.hpp"
  12. #include "Internals/NonCopyable.hpp"
  13. #define JSON_ARRAY_SIZE(NUMBER_OF_ELEMENTS) \
  14. (sizeof(JsonArray) + (NUMBER_OF_ELEMENTS) * sizeof(Internals::JsonArrayNode))
  15. namespace ArduinoJson {
  16. class JsonArray : public JsonPrintable, Internals::NonCopyable {
  17. friend class JsonBuffer;
  18. public:
  19. typedef JsonValue value_type;
  20. typedef JsonArrayIterator iterator;
  21. typedef JsonArrayConstIterator const_iterator;
  22. int size() const;
  23. bool success() { return _buffer != NULL; }
  24. value_type &operator[](int index) const { return at(index); }
  25. value_type &at(int index) const;
  26. template <typename T>
  27. void add(T value) {
  28. add().set(value);
  29. }
  30. value_type &add();
  31. void add(double value, int decimals) { add().set(value, decimals); }
  32. void add(JsonArray &nestedArray) { add().set(nestedArray); }
  33. void add(JsonObject &nestedObject) { add().set(nestedObject); }
  34. JsonArray &createNestedArray();
  35. JsonObject &createNestedObject();
  36. iterator begin() { return iterator(_firstNode); }
  37. iterator end() { return iterator(0); }
  38. const_iterator begin() const { return const_iterator(_firstNode); }
  39. const_iterator end() const { return const_iterator(0); }
  40. static JsonArray &invalid() { return _invalid; }
  41. virtual void writeTo(Internals::JsonWriter &writer) const;
  42. private:
  43. // constructor is private: instance must be created via a JsonBuffer
  44. JsonArray(JsonBuffer *buffer) : _buffer(buffer), _firstNode(NULL) {}
  45. Internals::JsonArrayNode *createNode();
  46. inline void addNode(Internals::JsonArrayNode *node);
  47. JsonBuffer *_buffer;
  48. Internals::JsonArrayNode *_firstNode;
  49. static JsonArray _invalid;
  50. };
  51. inline bool operator==(const JsonArray &left, const JsonArray &right) {
  52. // two JsonArray are equal if they are the same instance
  53. // (we don't compare the content)
  54. return &left == &right;
  55. }
  56. }