8000 Add a constructor to `VariantData` · smartcoder00/ArduinoJson@5edd435 · GitHub
[go: up one dir, main page]

Skip to content

Commit 5edd435

Browse files
committed
Add a constructor to VariantData
1 parent de9239c commit 5edd435

File tree

5 files changed

+10
-40
lines changed

5 files changed

+10
-40
lines changed

extras/tests/JsonVariant/misc.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,11 @@
55
#include <ArduinoJson.h>
66
#include <catch.hpp>
77

8+
TEST_CASE("VariantData") {
9+
REQUIRE(std::is_standard_layout<ArduinoJson::detail::VariantData>::value ==
10+
true);
11+
}
12+
813
TEST_CASE("JsonVariant from JsonArray") {
914
SECTION("JsonArray is null") {
1015
JsonArray arr;

extras/tests/Numbers/parseNumber.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@ using namespace ArduinoJson::detail;
1010

1111
TEST_CASE("Test unsigned integer overflow") {
1212
VariantData first, second;
13-
first.init();
14-
second.init();
1513

1614
// Avoids MSVC warning C4127 (conditional expression is constant)
1715
size_t integerSize = sizeof(JsonInteger);
@@ -30,8 +28,6 @@ TEST_CASE("Test unsigned integer overflow") {
3028

3129
TEST_CASE("Test signed integer overflow") {
3230
VariantData first, second;
33-
first.init();
34-
second.init();
3531

3632
// Avoids MSVC warning C4127 (conditional expression is constant)
3733
size_t integerSize = sizeof(JsonInteger);
@@ -50,7 +46,6 @@ TEST_CASE("Test signed integer overflow") {
5046

5147
TEST_CASE("Invalid value") {
5248
VariantData result;
53-
result.init();
5449

5550
parseNumber("6a3", result);
5651

src/ArduinoJson/Document/JsonDocument.hpp

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
4141
// https://arduinojson.org/v6/api/jsondocument/clear/
4242
void clear() {
4343
_pool.clear();
44-
_data.init();
44+
_data.setNull();
4545
}
4646

4747
// Returns true if the root is of the specified type.
@@ -277,17 +277,11 @@ class JsonDocument : public detail::VariantOperators<const JsonDocument&> {
277277
}
278278

279279
protected:
280-
JsonDocument() : _pool(0, 0) {
281-
_data.init();
282-
}
280+
JsonDocument() : _pool(0, 0) {}
283281

284-
JsonDocument(detail::MemoryPool pool) : _pool(pool) {
285-
_data.init();
286-
}
282+
JsonDocument(detail::MemoryPool pool) : _pool(pool) {}
287283

288-
JsonDocument(char* buf, size_t capa) : _pool(buf, capa) {
289-
_data.init();
290-
}
284+
JsonDocument(char* buf, size_t capa) : _pool(buf, capa) {}
291285

292286
~JsonDocument() {}
293287

src/ArduinoJson/Numbers/parseNumber.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,6 @@ inline bool parseNumber(const char* s, VariantData& result) {
146146
template <typename T>
147147
inline T parseNumber(const char* s) {
148148
VariantData value;
149-
value.init(); // VariantData is a POD, so it has no constructor
150149
parseNumber(s, value);
151150
return Converter<T>::fromJson(JsonVariantConst(&value));
152151
}

src/ArduinoJson/Variant/VariantData.hpp

Lines changed: 1 addition & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -11,31 +11,14 @@
1111
#include <ArduinoJson/Strings/StringAdapters.hpp>
1212
#include <ArduinoJson/Variant/VariantContent.hpp>
1313

14-
// VariantData can't have a constructor (to be a POD), so we have no way to fix
15-
// this warning
16-
#if defined(__GNUC__)
17-
# if __GNUC__ >= 7
18-
# pragma GCC diagnostic push
19-
# pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
20-
# pragma GCC diagnostic ignored "-Wuninitialized"
21-
# endif
22-
#endif
23-
2414
ARDUINOJSON_BEGIN_PRIVATE_NAMESPACE
2515

2616
class VariantData {
2717
VariantContent _content; // must be first to allow cast from array to variant
2818
uint8_t _flags;
2919

3020
public:
31-
// Must be a POD!
32-
// - no constructor
33-
// - no destructor
34-
// - no virtual
35-
// - no inheritance
36-
void init() {
37-
_flags = VALUE_IS_NULL;
38-
}
21+
VariantData() : _flags(VALUE_IS_NULL) {}
3922

4023
void operator=(const VariantData& src) {
4124
_content = src._content;
@@ -337,9 +320,3 @@ class VariantData {
337320
};
338321

339322
ARDUINOJSON_END_PRIVATE_NAMESPACE
340-
341-
#if defined(__GNUC__)
342-
# if __GNUC__ >= 8
343-
# pragma GCC diagnostic pop
344-
# endif
345-
#endif

0 commit comments

Comments
 (0)
0