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

bblanchon / ArduinoJson / 16175784963

09 Jul 2025 04:55PM UTC coverage: 99.267% (-0.08%) from 99.35%
16175784963

push

github

bblanchon
Replace `getData()/getResourceManager()` with `getImpl()`

168 of 168 new or added lines in 20 files covered. (100.0%)

7 existing lines in 5 files now uncovered.

3930 of 3959 relevant lines covered (99.27%)

10797.62 hits per line

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

96.67
/src/ArduinoJson/Variant/VariantData.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2025, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Memory/StringNode.hpp>
8
#include <ArduinoJson/Variant/VariantContent.hpp>
9

10
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
11

12
template <typename T>
13
T parseNumber(const char* s);
14

15
template <typename T>
16
static bool isTinyString(const T& s, size_t n) {
2,057✔
17
  if (n > tinyStringMaxLength)
2,057✔
18
    return false;
1,765✔
19
  bool containsNul = false;
292✔
20
  for (uint8_t i = 0; i < uint8_t(n); i++)
934✔
21
    containsNul |= !s[i];
642✔
22
  return !containsNul;
292✔
23
}
24

25
struct VariantData {
26
  VariantContent content;  // must be first to allow cast from array to variant
27
  VariantType type = VariantType::Null;
28
  SlotId next = NULL_SLOT;
29

30
  // Placement new
31
  static void* operator new(size_t, void* p) noexcept {
74,806✔
32
    return p;
74,806✔
33
  }
34

35
  static void operator delete(void*, void*) noexcept {}
36

37
  void setBoolean(bool value) {
330✔
38
    ARDUINOJSON_ASSERT(type == VariantType::Null);
39
    type = VariantType::Boolean;
330✔
40
    content.asBoolean = value;
330✔
41
  }
330✔
42

43
  template <typename TAdaptedString>
44
  void setTinyString(const TAdaptedString& s) {
280✔
45
    ARDUINOJSON_ASSERT(type == VariantType::Null);
46
    ARDUINOJSON_ASSERT(s.size() <= tinyStringMaxLength);
47

48
    type = VariantType::TinyString;
280✔
49

50
    auto n = uint8_t(s.size());
280✔
51
    for (uint8_t i = 0; i < n; i++) {
886✔
52
      char c = s[i];
606✔
53
      ARDUINOJSON_ASSERT(c != 0);  // no NUL in tiny string
54
      content.asTinyString[i] = c;
606✔
55
    }
56

57
    content.asTinyString[n] = 0;
280✔
58
  }
280✔
59

60
  void setOwnedString(StringNode* s) {
1,765✔
61
    ARDUINOJSON_ASSERT(type == VariantType::Null);
62
    ARDUINOJSON_ASSERT(s);
63
    type = VariantType::OwnedString;
1,765✔
64
    content.asOwnedString = s;
1,765✔
65
  }
1,765✔
66

67
  void setRawString(StringNode* s) {
87✔
68
    ARDUINOJSON_ASSERT(type == VariantType::Null);
69
    ARDUINOJSON_ASSERT(s);
70
    type = VariantType::RawString;
87✔
71
    content.asOwnedString = s;
87✔
72
  }
87✔
73

74
  bool isCollection() const {
6,739✔
75
    return type & VariantTypeBits::CollectionMask;
6,739✔
76
  }
77

78
  bool isFloat() const {
406✔
79
    return type & VariantTypeBits::NumberBit;
406✔
80
  }
81

82
  bool isString() const {
80✔
83
    return type == VariantType::LinkedString ||
136✔
84
           type == VariantType::OwnedString || type == VariantType::TinyString;
80✔
85
  }
86

87
  VariantData* toArray() {
1,270✔
88
    ARDUINOJSON_ASSERT(type == VariantType::Null);
89
    type = VariantType::Array;
1,270✔
90
    new (&content.asCollection) CollectionData();
2,540✔
91
    return this;
1,270✔
92
  }
93

94
  VariantData* toObject() {
1,348✔
95
    ARDUINOJSON_ASSERT(type == VariantType::Null);
96
    type = VariantType::Object;
1,348✔
97
    new (&content.asCollection) CollectionData();
2,696✔
98
    return this;
1,348✔
99
  }
100

101
  VariantData* getOrCreateArray() {
444✔
102
    switch (type) {
444✔
103
      case VariantType::Null:
247✔
104
        return toArray();
247✔
105
      case VariantType::Array:
194✔
106
        return this;
194✔
107
      default:
3✔
108
        return nullptr;
3✔
109
    }
110
  }
111

112
  VariantData* getOrCreateObject() {
959✔
113
    switch (type) {
959✔
114
      case VariantType::Null:
368✔
115
        return toObject();
368✔
116
      case VariantType::Object:
591✔
117
        return this;
591✔
UNCOV
118
      default:
×
UNCOV
119
        return nullptr;
×
120
    }
121
  }
122
};
123

124
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

© 2025 Coveralls, Inc