JsonArrayBase.h 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /*
  2. * Arduino JSON library
  3. * Benoit Blanchon 2014 - MIT License
  4. */
  5. #pragma once
  6. #include "JsonPrintable.h"
  7. namespace ArduinoJson
  8. {
  9. namespace Generator
  10. {
  11. class JsonArrayBase : public JsonPrintable
  12. {
  13. public:
  14. JsonArrayBase(JsonValue* items, int capacity)
  15. : items(items), capacity(capacity), count(0)
  16. {
  17. }
  18. void add(const Printable& value)
  19. {
  20. addIfPossible<const Printable&>(value);
  21. }
  22. void add(bool value)
  23. {
  24. addIfPossible<bool>(value);
  25. }
  26. void add(int value)
  27. {
  28. addIfPossible<long>(value);
  29. }
  30. void add(long value)
  31. {
  32. addIfPossible<long>(value);
  33. }
  34. void add(double value)
  35. {
  36. addIfPossible<double>(value);
  37. }
  38. void add(const char* value)
  39. {
  40. addIfPossible<const char*>(value);
  41. }
  42. template<int DIGITS>
  43. void add(double value)
  44. {
  45. if (count >= capacity) return;
  46. JsonValue& v = items[count++];
  47. v.set<DIGITS>(value);
  48. }
  49. virtual size_t printTo(Print& p) const;
  50. using JsonPrintable::printTo;
  51. private:
  52. JsonValue* items;
  53. int capacity, count;
  54. template<typename T>
  55. void addIfPossible(T value)
  56. {
  57. if (count < capacity)
  58. items[count++] = value;
  59. }
  60. };
  61. }
  62. }