• 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

96.3
/src/ArduinoJson/Array/JsonArrayConst.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2023, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Array/JsonArrayIterator.hpp>
8
#include <ArduinoJson/Variant/VariantAttorney.hpp>
9
#include <ArduinoJson/Variant/VariantData.hpp>
10

11
ARDUINOJSON_BEGIN_PUBLIC_NAMESPACE
12

13
class JsonObject;
14

15
// A read-only reference to an array in a JsonDocument
16
// https://arduinojson.org/v7/api/jsonarrayconst/
17
class JsonArrayConst : public detail::VariantOperators<JsonArrayConst> {
18
  friend class JsonArray;
19
  friend class detail::VariantAttorney;
20

21
 public:
22
  typedef JsonArrayConstIterator iterator;
23

24
  // Returns an iterator to the first element of the array.
25
  // https://arduinojson.org/v7/api/jsonarrayconst/begin/
26
  FORCE_INLINE iterator begin() const {
27
    if (!data_)
545✔
28
      return iterator();
3✔
29
    return iterator(data_->createIterator(resources_), resources_);
542✔
30
  }
31

32
  // Returns an iterator to the element following the last element of the array.
33
  // https://arduinojson.org/v7/api/jsonarrayconst/end/
34
  FORCE_INLINE iterator end() const {
35
    return iterator();
802✔
36
  }
37

38
  // Creates an unbound reference.
39
  FORCE_INLINE JsonArrayConst() : data_(0) {}
6✔
40

41
  // INTERNAL USE ONLY
42
  FORCE_INLINE JsonArrayConst(const detail::ArrayData* data,
43
                              const detail::ResourceManager* resources)
44
      : data_(data), resources_(resources) {}
753✔
45

46
  // Returns the element at the specified index.
47
  // https://arduinojson.org/v7/api/jsonarrayconst/subscript/
48
  FORCE_INLINE JsonVariantConst operator[](size_t index) const {
49
    return JsonVariantConst(
6✔
50
        detail::ArrayData::getElement(data_, index, resources_), resources_);
3✔
51
  }
52

53
  operator JsonVariantConst() const {
134✔
54
    return JsonVariantConst(collectionToVariant(data_), resources_);
134✔
55
  }
56

57
  // Returns true if the reference is unbound.
58
  // https://arduinojson.org/v7/api/jsonarrayconst/isnull/
59
  FORCE_INLINE bool isNull() const {
60
    return data_ == 0;
6✔
61
  }
62

63
  // Returns true if the reference is bound.
64
  // https://arduinojson.org/v7/api/jsonarrayconst/isnull/
65
  FORCE_INLINE operator bool() const {
66
    return data_ != 0;
515✔
67
  }
68

69
  // Returns the depth (nesting level) of the array.
70
  // https://arduinojson.org/v7/api/jsonarrayconst/nesting/
71
  FORCE_INLINE size_t nesting() const {
72
    return detail::VariantData::nesting(collectionToVariant(data_), resources_);
73
  }
74

75
  // Returns the number of elements in the array.
76
  // https://arduinojson.org/v7/api/jsonarrayconst/size/
77
  FORCE_INLINE size_t size() const {
78
    return data_ ? data_->size(resources_) : 0;
79
  }
80

81
  // DEPRECATED: always returns zero
82
  ARDUINOJSON_DEPRECATED("always returns zero")
83
  size_t memoryUsage() const {
1✔
84
    return 0;
1✔
85
  }
86

87
 private:
88
  const detail::VariantData* getData() const {
89
    return collectionToVariant(data_);
90
  }
91

92
  const detail::ArrayData* data_;
93
  const detail::ResourceManager* resources_;
94
};
95

96
// Compares the content of two arrays.
97
// Returns true if the two arrays are equal.
98
inline bool operator==(JsonArrayConst lhs, JsonArrayConst rhs) {
253✔
99
  if (!lhs && !rhs)
254✔
100
    return true;
×
101
  if (!lhs || !rhs)
505✔
102
    return false;
2✔
103

104
  auto a = lhs.begin();
105
  auto b = rhs.begin();
106

107
  for (;;) {
108
    if (a == b)  // same pointer or both null
551✔
109
      return true;
191✔
110
    if (a == lhs.end() || b == rhs.end())
718✔
111
      return false;
4✔
112
    if (*a != *b)
356✔
113
      return false;
56✔
114
    ++a;
300✔
115
    ++b;
300✔
116
  }
117
}
118

119
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