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

bblanchon / ArduinoJson / 6770901880

06 Nov 2023 12:24PM CUT coverage: 99.545%. Remained the same
6770901880

push

github

bblanchon
CI: always use libc++ with clang

3497 of 3513 relevant lines covered (99.54%)

10637.15 hits per line

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

98.08
/src/ArduinoJson/Array/JsonArray.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2023, 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
  FORCE_INLINE JsonArray() : data_(0), resources_(0) {}
17✔
24

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

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

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

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

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

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

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

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

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

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

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

103
    return true;
12✔
104
  }
105

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

197
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