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

bblanchon / ArduinoJson / 5371678521

pending completion
5371678521

push

github

bblanchon
Manage resources in `CollectionData`

107 of 107 new or added lines in 8 files covered. (100.0%)

3383 of 3405 relevant lines covered (99.35%)

6273.07 hits per line

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

100.0
/src/ArduinoJson/Collection/CollectionData.hpp
1
// ArduinoJson - https://arduinojson.org
2
// Copyright © 2014-2023, Benoit BLANCHON
3
// MIT License
4

5
#pragma once
6

7
#include <ArduinoJson/Namespace.hpp>
8
#include <ArduinoJson/Polyfills/assert.hpp>
9

10
#include <stddef.h>  // size_t
11

12
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
13

14
class VariantData;
15
class VariantSlot;
16

17
class CollectionData {
18
  VariantSlot* head_ = nullptr;
19
  VariantSlot* tail_ = nullptr;
20

21
 public:
22
  // Placement new
23
  static void* operator new(size_t, void* p) noexcept {
2,486✔
24
    return p;
2,486✔
25
  }
26

27
  static void operator delete(void*, void*) noexcept {}
28

29
  size_t memoryUsage() const;
30
  size_t size() const;
31

32
  VariantData* addElement(ResourceManager* resources);
33

34
  inline VariantData* addMember(StringNode* key, ResourceManager* resources);
35

36
  template <typename TAdaptedString>
37
  VariantData* addMember(TAdaptedString key, ResourceManager* resources);
38

39
  void clear(ResourceManager* resources);
40
  bool copyFrom(const CollectionData& src, ResourceManager* resources);
41

42
  VariantData* getOrAddElement(size_t index, ResourceManager* resources);
43

44
  VariantData* getElement(size_t index) const;
45

46
  template <typename TAdaptedString>
47
  VariantData* getOrAddMember(TAdaptedString key, ResourceManager* resources);
48

49
  template <typename TAdaptedString>
50
  VariantData* getMember(TAdaptedString key) const;
51

52
  void removeSlot(VariantSlot* slot, ResourceManager* resources);
53

54
  void removeElement(size_t index, ResourceManager* resources);
55

56
  template <typename TAdaptedString>
57
  inline void removeMember(TAdaptedString key, ResourceManager* resources);
58

59
  VariantSlot* head() const {
1,710✔
60
    return head_;
1,710✔
61
  }
62

63
  void movePointers(ptrdiff_t variantDistance);
64

65
 private:
66
  void addSlot(VariantSlot*);
67

68
  VariantSlot* getPreviousSlot(VariantSlot*) const;
69

70
  VariantSlot* getSlot(size_t index) const;
71

72
  template <typename TAdaptedString>
73
  VariantSlot* getSlot(TAdaptedString key) const;
74
};
75

76
inline const VariantData* collectionToVariant(
270✔
77
    const CollectionData* collection) {
78
  const void* data = collection;  // prevent warning cast-align
270✔
79
  return reinterpret_cast<const VariantData*>(data);
270✔
80
}
81

82
inline VariantData* collectionToVariant(CollectionData* collection) {
1,206✔
83
  void* data = collection;  // prevent warning cast-align
1,206✔
84
  return reinterpret_cast<VariantData*>(data);
1,206✔
85
}
86

87
bool arrayEquals(const detail::CollectionData& lhs,
88
                 const detail::CollectionData& rhs);
89
bool arrayEquals(const detail::CollectionData* lhs,
90
                 const detail::CollectionData* rhs);
91
bool objectEquals(const detail::CollectionData& lhs,
92
                  const detail::CollectionData& rhs);
93
bool objectEquals(const detail::CollectionData* lhs,
94
                  const detail::CollectionData* rhs);
95

96
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