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

bblanchon / ArduinoJson / 16089235804

05 Jul 2025 02:50PM UTC coverage: 99.248% (-0.006%) from 99.254%
16089235804

push

github

bblanchon
Merge `ArrayImpl`, `CollectionImpl`, and `ObjectImpl` into `VariantImpl`

125 of 125 new or added lines in 22 files covered. (100.0%)

1 existing line in 1 file now uncovered.

3960 of 3990 relevant lines covered (99.25%)

11295.89 hits per line

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

96.15
/src/ArduinoJson/Object/ObjectImpl.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2025, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Variant/VariantCompare.hpp>
8
#include <ArduinoJson/Variant/VariantImpl.hpp>
9

10
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
11

12
template <typename TAdaptedString>
13
inline VariantData* VariantImpl::getMember(TAdaptedString key) const {
4,758✔
14
  auto it = findKey(key);
4,758✔
15
  if (it.done())
4,758✔
16
    return nullptr;
3,496✔
17
  it.next(resources_);
1,262✔
18
  return it.data();
1,262✔
19
}
20

21
template <typename TAdaptedString>
22
VariantData* VariantImpl::getOrAddMember(TAdaptedString key) {
959✔
23
  auto data = getMember(key);
959✔
24
  if (data)
959✔
25
    return data;
34✔
26
  return addMember(key);
925✔
27
}
28

29
template <typename TAdaptedString>
30
inline VariantImpl::iterator VariantImpl::findKey(TAdaptedString key) const {
4,789✔
31
  if (!isObject())
4,789✔
32
    return iterator();
60✔
33
  if (key.isNull())
4,729✔
34
    return iterator();
11✔
35
  bool isKey = true;
4,718✔
36
  for (auto it = createIterator(); !it.done(); it.next(resources_)) {
25,560✔
37
    VariantImpl variant(it.data(), resources_);
22,130✔
38
    if (isKey && stringEquals(key, adaptString(variant.asString())))
22,130✔
39
      return it;
1,288✔
40
    isKey = !isKey;
20,842✔
41
  }
42
  return iterator();
3,430✔
43
}
44

45
template <typename TAdaptedString>
46
inline void VariantImpl::removeMember(TAdaptedString key) {
31✔
47
  removeMember(findKey(key));
31✔
48
}
31✔
49

50
template <typename TAdaptedString>
51
inline VariantData* VariantImpl::addMember(TAdaptedString key) {
925✔
52
  if (!isObject())
925✔
UNCOV
53
    return nullptr;
×
54

55
  auto keySlot = allocVariant();
925✔
56
  if (!keySlot)
925✔
57
    return nullptr;
2✔
58

59
  auto valueSlot = allocVariant();
923✔
60
  if (!valueSlot)
923✔
61
    return nullptr;
1✔
62

63
  VariantImpl keyImpl(keySlot.ptr(), resources_);
922✔
64
  if (!keyImpl.setString(key))
922✔
65
    return nullptr;
3✔
66

67
  VariantImpl::appendPair(keySlot, valueSlot);
919✔
68

69
  return valueSlot.ptr();
919✔
70
}
71

72
inline VariantData* VariantImpl::addPair(VariantData** value) {
1,336✔
73
  ARDUINOJSON_ASSERT(isObject());
74

75
  auto keySlot = allocVariant();
1,336✔
76
  if (!keySlot)
1,336✔
77
    return nullptr;
4✔
78

79
  auto valueSlot = allocVariant();
1,332✔
80
  if (!valueSlot)
1,332✔
81
    return nullptr;
×
82
  *value = valueSlot.ptr();
1,332✔
83

84
  VariantImpl::appendPair(keySlot, valueSlot);
1,332✔
85

86
  return keySlot.ptr();
1,332✔
87
}
88

89
// Returns the size (in bytes) of an object with n members.
90
constexpr size_t sizeofObject(size_t n) {
1,688✔
91
  return 2 * n * sizeof(VariantData);
1,688✔
92
}
93

94
ARDUINOJSON_END_PRIVATE_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

© 2026 Coveralls, Inc