• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

bblanchon / ArduinoJson / 8738040343

18 Apr 2024 12:39PM CUT coverage: 99.589%. Remained the same
8738040343

push

github

bblanchon
Fix error "pasting X and Y does not give a valid preprocessing token"

3639 of 3654 relevant lines covered (99.59%)

13017.28 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

98.46
/src/ArduinoJson/Array/JsonArray.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2024, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Array/ElementProxy.hpp>
8
#include <ArduinoJson/Array/JsonArrayConst.hpp>
9

10
ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE
11

12
class JsonObject;
13

14
// A reference to an array in a JsonDocument
15
// https://arduinojson.org/v7/api/jsonarray/
16
class JsonArray : public detail::VariantOperators<JsonArray> {
17
  friend class detail::VariantAttorney;
18

19
 public:
20
  typedef JsonArrayIterator iterator;
21

22
  // Constructs an unbound reference.
23
  JsonArray() : data_(0), resources_(0) {}
18✔
24

25
  // INTERNAL USE ONLY
26
  JsonArray(detail::ArrayData* data, detail::ResourceManager* resources)
326✔
27
      : data_(data), resources_(resources) {}
326✔
28

29
  // Returns a JsonVariant pointing to the array.
30
  // https://arduinojson.org/v7/api/jsonvariant/
31
  operator JsonVariant() {
8✔
32
    void* data = data_;  // prevent warning cast-align
8✔
33
    return JsonVariant(reinterpret_cast<detail::VariantData*>(data),
8✔
34
                       resources_);
8✔
35
  }
36

37
  // Returns a read-only reference to the array.
38
  // https://arduinojson.org/v7/api/jsonarrayconst/
39
  operator JsonArrayConst() const {
43✔
40
    return JsonArrayConst(data_, resources_);
43✔
41
  }
42

43
  // Appends a new (empty) element to the array.
44
  // Returns a reference to the new element.
45
  // https://arduinojson.org/v7/api/jsonarray/add/
46
  template <typename T>
47
  typename detail::enable_if<!detail::is_same<T, JsonVariant>::value, T>::type
48
  add() const {
36✔
49
    return add<JsonVariant>().to<T>();
72✔
50
  }
51

52
  // Appends a new (null) element to the array.
53
  // Returns a reference to the new element.
54
  // https://arduinojson.org/v7/api/jsonarray/add/
55
  template <typename T>
56
  typename detail::enable_if<detail::is_same<T, JsonVariant>::value, T>::type
57
  add() const {
66,216✔
58
    return JsonVariant(detail::ArrayData::addElement(data_, resources_),
66,216✔
59
                       resources_);
66,216✔
60
  }
61

62
  // Appends a value to the array.
63
  // https://arduinojson.org/v7/api/jsonarray/add/
64
  template <typename T>
65
  bool add(const T& value) const {
548✔
66
    return add<JsonVariant>().set(value);
548✔
67
  }
68

69
  // Appends a value to the array.
70
  // https://arduinojson.org/v7/api/jsonarray/add/
71
  template <typename T>
72
  bool add(T* value) const {
65,603✔
73
    return add<JsonVariant>().set(value);
65,603✔
74
  }
75

76
  // Returns an iterator to the first element of the array.
77
  // https://arduinojson.org/v7/api/jsonarray/begin/
78
  iterator begin() const {
7✔
79
    if (!data_)
7✔
80
      return iterator();
2✔
81
    return iterator(data_->createIterator(resources_), resources_);
5✔
82
  }
83

84
  // Returns an iterator following the last element of the array.
85
  // https://arduinojson.org/v7/api/jsonarray/end/
86
  iterator end() const {
6✔
87
    return iterator();
6✔
88
  }
89

90
  // Copies an array.
91
  // https://arduinojson.org/v7/api/jsonarray/set/
92
  bool set(JsonArrayConst src) const {
13✔
93
    if (!data_)
13✔
94
      return false;
×
95

96
    clear();
13✔
97
    for (auto element : src) {
19✔
98
      if (!add(element))
7✔
99
        return false;
1✔
100
    }
101

102
    return true;
12✔
103
  }
104

105
  // Removes the element at the specified iterator.
106
  // https://arduinojson.org/v7/api/jsonarray/remove/
107
  void remove(iterator it) const {
5✔
108
    detail::ArrayData::remove(data_, it.iterator_, resources_);
5✔
109
  }
5✔
110

111
  // Removes the element at the specified index.
112
  // https://arduinojson.org/v7/api/jsonarray/remove/
113
  void remove(size_t index) const {
5✔
114
    detail::ArrayData::removeElement(data_, index, resources_);
5✔
115
  }
5✔
116

117
  // Removes all the elements of the array.
118
  // https://arduinojson.org/v7/api/jsonarray/clear/
119
  void clear() const {
16✔
120
    detail::ArrayData::clear(data_, resources_);
16✔
121
  }
16✔
122

123
  // Gets or sets the element at the specified index.
124
  // https://arduinojson.org/v7/api/jsonarray/subscript/
125
  detail::ElementProxy<JsonArray> operator[](size_t index) const {
245✔
126
    return {*this, index};
245✔
127
  }
128

129
  operator JsonVariantConst() const {
271✔
130
    return JsonVariantConst(collectionToVariant(data_), resources_);
271✔
131
  }
132

133
  // Returns true if the reference is unbound.
134
  // https://arduinojson.org/v7/api/jsonarray/isnull/
135
  bool isNull() const {
19✔
136
    return data_ == 0;
19✔
137
  }
138

139
  // Returns true if the reference is bound.
140
  // https://arduinojson.org/v7/api/jsonarray/isnull/
141
  operator bool() const {
2✔
142
    return data_ != 0;
2✔
143
  }
144

145
  // Returns the depth (nesting level) of the array.
146
  // https://arduinojson.org/v7/api/jsonarray/nesting/
147
  size_t nesting() const {
5✔
148
    return detail::VariantData::nesting(collectionToVariant(data_), resources_);
5✔
149
  }
150

151
  // Returns the number of elements in the array.
152
  // https://arduinojson.org/v7/api/jsonarray/size/
153
  size_t size() const {
76✔
154
    return data_ ? data_->size(resources_) : 0;
76✔
155
  }
156

157
  // DEPRECATED: use add<JsonVariant>() instead
158
  ARDUINOJSON_DEPRECATED("use add<JsonVariant>() instead")
159
  JsonVariant add() const {
1✔
160
    return add<JsonVariant>();
1✔
161
  }
162

163
  // DEPRECATED: use add<JsonArray>() instead
164
  ARDUINOJSON_DEPRECATED("use add<JsonArray>() instead")
165
  JsonArray createNestedArray() const {
1✔
166
    return add<JsonArray>();
1✔
167
  }
168

169
  // DEPRECATED: use add<JsonObject>() instead
170
  ARDUINOJSON_DEPRECATED("use add<JsonObject>() instead")
171
  JsonObject createNestedObject() const;
172

173
  // DEPRECATED: always returns zero
174
  ARDUINOJSON_DEPRECATED("always returns zero")
175
  size_t memoryUsage() const {
1✔
176
    return 0;
1✔
177
  }
178

179
 private:
180
  detail::ResourceManager* getResourceManager() const {
505✔
181
    return resources_;
505✔
182
  }
183

184
  detail::VariantData* getData() const {
223✔
185
    return collectionToVariant(data_);
223✔
186
  }
187

188
  detail::VariantData* getOrCreateData() const {
22✔
189
    return collectionToVariant(data_);
22✔
190
  }
191

192
  detail::ArrayData* data_;
193
  detail::ResourceManager* resources_;
194
};
195

196
ARDUINOJSON_END_PUBLIC_NAMESPACE
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc