forked from bblanchon/ArduinoJson
Moved float tables to PROGMEM
This commit is contained in:
@ -8,6 +8,7 @@ HEAD
|
|||||||
* Added `JsonDocument::overflowed()` which tells if the memory pool was too small (issue #1358)
|
* Added `JsonDocument::overflowed()` which tells if the memory pool was too small (issue #1358)
|
||||||
* Added `DeserializationError::EmptyInput` which tells if the input was empty
|
* Added `DeserializationError::EmptyInput` which tells if the input was empty
|
||||||
* Added `DeserializationError::f_str()` which returns a `const __FlashStringHelper*` (issue #846)
|
* Added `DeserializationError::f_str()` which returns a `const __FlashStringHelper*` (issue #846)
|
||||||
|
* Moved float convertion tables to PROGMEM
|
||||||
* Fixed `JsonVariant::set((char*)0)` which returned false instead of true (issue #1368)
|
* Fixed `JsonVariant::set((char*)0)` which returned false instead of true (issue #1368)
|
||||||
* Fixed error `No such file or directory #include <WString.h>` (issue #1381)
|
* Fixed error `No such file or directory #include <WString.h>` (issue #1381)
|
||||||
|
|
||||||
|
@ -28,7 +28,15 @@ inline void* pgm_read_ptr(const void* p) {
|
|||||||
return *reinterpret_cast<void* const*>(convertFlashToPtr(p));
|
return *reinterpret_cast<void* const*>(convertFlashToPtr(p));
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ARDUINOJSON_DEFINE_PROGMEM_ARRAY(type, name, value) \
|
inline float pgm_read_float(const void* p) {
|
||||||
|
return *reinterpret_cast<const float*>(convertFlashToPtr(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
inline uint32_t pgm_read_dword(const void* p) {
|
||||||
|
return *reinterpret_cast<const uint32_t*>(convertFlashToPtr(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
#define ARDUINOJSON_DEFINE_STATIC_ARRAY(type, name, value) \
|
||||||
static type const ARDUINOJSON_CONCAT2(name, _progmem)[] = value; \
|
static type const ARDUINOJSON_CONCAT2(name, _progmem)[] = value; \
|
||||||
static type const* name = reinterpret_cast<type const*>( \
|
static type const* name = reinterpret_cast<type const*>( \
|
||||||
convertPtrToFlash(ARDUINOJSON_CONCAT2(name, _progmem)));
|
convertPtrToFlash(ARDUINOJSON_CONCAT2(name, _progmem)));
|
||||||
|
@ -5,6 +5,8 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ArduinoJson/Namespace.hpp>
|
#include <ArduinoJson/Namespace.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/preprocessor.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/static_array.hpp>
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_STD_STREAM
|
#if ARDUINOJSON_ENABLE_STD_STREAM
|
||||||
#include <ostream>
|
#include <ostream>
|
||||||
@ -86,22 +88,20 @@ class DeserializationError {
|
|||||||
return messages[_code];
|
return messages[_code];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define ARDUINOJSON_EXPAND7(a, b, c, d, e, f, g) a, b, c, d, e, f, g
|
|
||||||
|
|
||||||
#if ARDUINOJSON_ENABLE_PROGMEM
|
#if ARDUINOJSON_ENABLE_PROGMEM
|
||||||
const __FlashStringHelper* f_str() const {
|
const __FlashStringHelper* f_str() const {
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s0, "Ok");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s0, "Ok");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s1, "EmptyInput");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s1, "EmptyInput");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s2, "IncompleteInput");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s2, "IncompleteInput");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s3, "InvalidInput");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s3, "InvalidInput");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s4, "NoMemory");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s4, "NoMemory");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s5, "NotSupported");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s5, "NotSupported");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(char, s6, "TooDeep");
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(char, s6, "TooDeep");
|
||||||
ARDUINOJSON_DEFINE_PROGMEM_ARRAY(
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(
|
||||||
const char*, messages,
|
const char*, messages,
|
||||||
ARDUINOJSON_EXPAND7({s0, s1, s2, s3, s4, s5, s6}));
|
ARDUINOJSON_EXPAND7({s0, s1, s2, s3, s4, s5, s6}));
|
||||||
return reinterpret_cast<const __FlashStringHelper*>(
|
return ARDUINOJSON_READ_STATIC_ARRAY(const __FlashStringHelper*, messages,
|
||||||
pgm_read_ptr(messages + _code));
|
_code);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -5,45 +5,22 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include <ArduinoJson/Configuration.hpp>
|
#include <ArduinoJson/Configuration.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/preprocessor.hpp>
|
||||||
#include <ArduinoJson/version.hpp>
|
#include <ArduinoJson/version.hpp>
|
||||||
|
|
||||||
#ifndef ARDUINOJSON_NAMESPACE
|
#ifndef ARDUINOJSON_NAMESPACE
|
||||||
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0000() 0
|
#define ARDUINOJSON_NAMESPACE \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0001() 1
|
ARDUINOJSON_CONCAT4( \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0010() 2
|
ARDUINOJSON_CONCAT4(ArduinoJson, ARDUINOJSON_VERSION_MAJOR, \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0011() 3
|
ARDUINOJSON_VERSION_MINOR, \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0100() 4
|
ARDUINOJSON_VERSION_REVISION), \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0101() 5
|
_, \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0110() 6
|
ARDUINOJSON_HEX_DIGIT(ARDUINOJSON_ENABLE_PROGMEM, \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_0111() 7
|
ARDUINOJSON_USE_LONG_LONG, ARDUINOJSON_USE_DOUBLE, \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1000() 8
|
ARDUINOJSON_ENABLE_STRING_DEDUPLICATION), \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1001() 9
|
ARDUINOJSON_HEX_DIGIT( \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1010() A
|
ARDUINOJSON_ENABLE_NAN, ARDUINOJSON_ENABLE_INFINITY, \
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1011() B
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1100() C
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1101() D
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1110() E
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT_1111() F
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT_(A, B, C, D) ARDUINOJSON_HEX_DIGIT_##A##B##C##D()
|
|
||||||
#define ARDUINOJSON_HEX_DIGIT(A, B, C, D) ARDUINOJSON_HEX_DIGIT_(A, B, C, D)
|
|
||||||
|
|
||||||
#define ARDUINOJSON_CONCAT_(A, B) A##B
|
|
||||||
#define ARDUINOJSON_CONCAT2(A, B) ARDUINOJSON_CONCAT_(A, B)
|
|
||||||
#define ARDUINOJSON_CONCAT4(A, B, C, D) \
|
|
||||||
ARDUINOJSON_CONCAT2(ARDUINOJSON_CONCAT2(A, B), ARDUINOJSON_CONCAT2(C, D))
|
|
||||||
|
|
||||||
#define ARDUINOJSON_NAMESPACE \
|
|
||||||
ARDUINOJSON_CONCAT4( \
|
|
||||||
ARDUINOJSON_CONCAT4(ArduinoJson, ARDUINOJSON_VERSION_MAJOR, \
|
|
||||||
ARDUINOJSON_VERSION_MINOR, \
|
|
||||||
ARDUINOJSON_VERSION_REVISION), \
|
|
||||||
_, \
|
|
||||||
ARDUINOJSON_HEX_DIGIT(0, ARDUINOJSON_USE_LONG_LONG, \
|
|
||||||
ARDUINOJSON_USE_DOUBLE, \
|
|
||||||
ARDUINOJSON_ENABLE_STRING_DEDUPLICATION), \
|
|
||||||
ARDUINOJSON_HEX_DIGIT( \
|
|
||||||
ARDUINOJSON_ENABLE_NAN, ARDUINOJSON_ENABLE_INFINITY, \
|
|
||||||
ARDUINOJSON_ENABLE_COMMENTS, ARDUINOJSON_DECODE_UNICODE))
|
ARDUINOJSON_ENABLE_COMMENTS, ARDUINOJSON_DECODE_UNICODE))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -10,6 +10,8 @@
|
|||||||
#include <ArduinoJson/Configuration.hpp>
|
#include <ArduinoJson/Configuration.hpp>
|
||||||
#include <ArduinoJson/Polyfills/alias_cast.hpp>
|
#include <ArduinoJson/Polyfills/alias_cast.hpp>
|
||||||
#include <ArduinoJson/Polyfills/math.hpp>
|
#include <ArduinoJson/Polyfills/math.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/preprocessor.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/static_array.hpp>
|
||||||
|
|
||||||
namespace ARDUINOJSON_NAMESPACE {
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
@ -46,48 +48,60 @@ struct FloatTraits<T, 8 /*64bits*/> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static T positiveBinaryPowerOfTen(int index) {
|
static T positiveBinaryPowerOfTen(int index) {
|
||||||
static T factors[] = {
|
ARDUINOJSON_DEFINE_STATIC_ARRAY( //
|
||||||
1e1,
|
uint32_t, factors,
|
||||||
1e2,
|
ARDUINOJSON_EXPAND18({
|
||||||
1e4,
|
0x40240000, 0x00000000, // 1e1
|
||||||
1e8,
|
0x40590000, 0x00000000, // 1e2
|
||||||
1e16,
|
0x40C38800, 0x00000000, // 1e4
|
||||||
forge(0x4693B8B5, 0xB5056E17), // 1e32
|
0x4197D784, 0x00000000, // 1e8
|
||||||
forge(0x4D384F03, 0xE93FF9F5), // 1e64
|
0x4341C379, 0x37E08000, // 1e16
|
||||||
forge(0x5A827748, 0xF9301D32), // 1e128
|
0x4693B8B5, 0xB5056E17, // 1e32
|
||||||
forge(0x75154FDD, 0x7F73BF3C) // 1e256
|
0x4D384F03, 0xE93FF9F5, // 1e64
|
||||||
};
|
0x5A827748, 0xF9301D32, // 1e128
|
||||||
return factors[index];
|
0x75154FDD, 0x7F73BF3C // 1e256
|
||||||
|
}));
|
||||||
|
return forge(
|
||||||
|
ARDUINOJSON_READ_STATIC_ARRAY(uint32_t, factors, 2 * index),
|
||||||
|
ARDUINOJSON_READ_STATIC_ARRAY(uint32_t, factors, 2 * index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static T negativeBinaryPowerOfTen(int index) {
|
static T negativeBinaryPowerOfTen(int index) {
|
||||||
static T factors[] = {
|
ARDUINOJSON_DEFINE_STATIC_ARRAY( //
|
||||||
forge(0x3FB99999, 0x9999999A), // 1e-1
|
uint32_t, factors,
|
||||||
forge(0x3F847AE1, 0x47AE147B), // 1e-2
|
ARDUINOJSON_EXPAND18({
|
||||||
forge(0x3F1A36E2, 0xEB1C432D), // 1e-4
|
0x3FB99999, 0x9999999A, // 1e-1
|
||||||
forge(0x3E45798E, 0xE2308C3A), // 1e-8
|
0x3F847AE1, 0x47AE147B, // 1e-2
|
||||||
forge(0x3C9CD2B2, 0x97D889BC), // 1e-16
|
0x3F1A36E2, 0xEB1C432D, // 1e-4
|
||||||
forge(0x3949F623, 0xD5A8A733), // 1e-32
|
0x3E45798E, 0xE2308C3A, // 1e-8
|
||||||
forge(0x32A50FFD, 0x44F4A73D), // 1e-64
|
0x3C9CD2B2, 0x97D889BC, // 1e-16
|
||||||
forge(0x255BBA08, 0xCF8C979D), // 1e-128
|
0x3949F623, 0xD5A8A733, // 1e-32
|
||||||
forge(0x0AC80628, 0x64AC6F43) // 1e-256
|
0x32A50FFD, 0x44F4A73D, // 1e-64
|
||||||
};
|
0x255BBA08, 0xCF8C979D, // 1e-128
|
||||||
return factors[index];
|
0x0AC80628, 0x64AC6F43 // 1e-256
|
||||||
|
}));
|
||||||
|
return forge(
|
||||||
|
ARDUINOJSON_READ_STATIC_ARRAY(uint32_t, factors, 2 * index),
|
||||||
|
ARDUINOJSON_READ_STATIC_ARRAY(uint32_t, factors, 2 * index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static T negativeBinaryPowerOfTenPlusOne(int index) {
|
static T negativeBinaryPowerOfTenPlusOne(int index) {
|
||||||
static T factors[] = {
|
ARDUINOJSON_DEFINE_STATIC_ARRAY( //
|
||||||
1e0,
|
uint32_t, factors,
|
||||||
forge(0x3FB99999, 0x9999999A), // 1e-1
|
ARDUINOJSON_EXPAND18({
|
||||||
forge(0x3F50624D, 0xD2F1A9FC), // 1e-3
|
0x3FF00000, 0x00000000, // 1e0
|
||||||
forge(0x3E7AD7F2, 0x9ABCAF48), // 1e-7
|
0x3FB99999, 0x9999999A, // 1e-1
|
||||||
forge(0x3CD203AF, 0x9EE75616), // 1e-15
|
0x3F50624D, 0xD2F1A9FC, // 1e-3
|
||||||
forge(0x398039D6, 0x65896880), // 1e-31
|
0x3E7AD7F2, 0x9ABCAF48, // 1e-7
|
||||||
forge(0x32DA53FC, 0x9631D10D), // 1e-63
|
0x3CD203AF, 0x9EE75616, // 1e-15
|
||||||
forge(0x25915445, 0x81B7DEC2), // 1e-127
|
0x398039D6, 0x65896880, // 1e-31
|
||||||
forge(0x0AFE07B2, 0x7DD78B14) // 1e-255
|
0x32DA53FC, 0x9631D10D, // 1e-63
|
||||||
};
|
0x25915445, 0x81B7DEC2, // 1e-127
|
||||||
return factors[index];
|
0x0AFE07B2, 0x7DD78B14 // 1e-255
|
||||||
|
}));
|
||||||
|
return forge(
|
||||||
|
ARDUINOJSON_READ_STATIC_ARRAY(uint32_t, factors, 2 * index),
|
||||||
|
ARDUINOJSON_READ_STATIC_ARRAY(uint32_t, factors, 2 * index + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
static T nan() {
|
static T nan() {
|
||||||
@ -144,18 +158,24 @@ struct FloatTraits<T, 4 /*32bits*/> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
static T positiveBinaryPowerOfTen(int index) {
|
static T positiveBinaryPowerOfTen(int index) {
|
||||||
static T factors[] = {1e1f, 1e2f, 1e4f, 1e8f, 1e16f, 1e32f};
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(
|
||||||
return factors[index];
|
T, factors,
|
||||||
|
ARDUINOJSON_EXPAND6({1e1f, 1e2f, 1e4f, 1e8f, 1e16f, 1e32f}));
|
||||||
|
return ARDUINOJSON_READ_STATIC_ARRAY(T, factors, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static T negativeBinaryPowerOfTen(int index) {
|
static T negativeBinaryPowerOfTen(int index) {
|
||||||
static T factors[] = {1e-1f, 1e-2f, 1e-4f, 1e-8f, 1e-16f, 1e-32f};
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(
|
||||||
return factors[index];
|
T, factors,
|
||||||
|
ARDUINOJSON_EXPAND6({1e-1f, 1e-2f, 1e-4f, 1e-8f, 1e-16f, 1e-32f}));
|
||||||
|
return ARDUINOJSON_READ_STATIC_ARRAY(T, factors, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static T negativeBinaryPowerOfTenPlusOne(int index) {
|
static T negativeBinaryPowerOfTenPlusOne(int index) {
|
||||||
static T factors[] = {1e0f, 1e-1f, 1e-3f, 1e-7f, 1e-15f, 1e-31f};
|
ARDUINOJSON_DEFINE_STATIC_ARRAY(
|
||||||
return factors[index];
|
T, factors,
|
||||||
|
ARDUINOJSON_EXPAND6({1e0f, 1e-1f, 1e-3f, 1e-7f, 1e-15f, 1e-31f}));
|
||||||
|
return ARDUINOJSON_READ_STATIC_ARRAY(T, factors, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
static T forge(uint32_t bits) {
|
static T forge(uint32_t bits) {
|
||||||
|
@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson/Configuration.hpp>
|
||||||
#include <ArduinoJson/Namespace.hpp>
|
#include <ArduinoJson/Namespace.hpp>
|
||||||
#include <ArduinoJson/Polyfills/assert.hpp>
|
#include <ArduinoJson/Polyfills/assert.hpp>
|
||||||
|
|
||||||
@ -76,13 +77,3 @@ inline void* memcpy_P(void* dst, ARDUINOJSON_NAMESPACE::pgm_p src, size_t n) {
|
|||||||
return dst;
|
return dst;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef ARDUINOJSON_DEFINE_PROGMEM_ARRAY
|
|
||||||
#ifdef PROGMEM
|
|
||||||
#define ARDUINOJSON_DEFINE_PROGMEM_ARRAY(type, name, value) \
|
|
||||||
static type const name[] PROGMEM = value;
|
|
||||||
#else
|
|
||||||
#define ARDUINOJSON_DEFINE_PROGMEM_ARRAY(type, name, value) \
|
|
||||||
static type const name[] = value;
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
28
src/ArduinoJson/Polyfills/pgmspace_generic.hpp
Normal file
28
src/ArduinoJson/Polyfills/pgmspace_generic.hpp
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson/Namespace.hpp>
|
||||||
|
#include <ArduinoJson/Polyfills/type_traits.hpp>
|
||||||
|
|
||||||
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
typename enable_if<is_pointer<T>::value, T>::type pgm_read(const void* p) {
|
||||||
|
return reinterpret_cast<T>(pgm_read_ptr(p));
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
typename enable_if<is_same<T, float>::value, T>::type pgm_read(const void* p) {
|
||||||
|
return pgm_read_float(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
typename enable_if<is_same<T, uint32_t>::value, T>::type pgm_read(
|
||||||
|
const void* p) {
|
||||||
|
return pgm_read_dword(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace ARDUINOJSON_NAMESPACE
|
36
src/ArduinoJson/Polyfills/preprocessor.hpp
Normal file
36
src/ArduinoJson/Polyfills/preprocessor.hpp
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#define ARDUINOJSON_EXPAND6(a, b, c, d, e, f) a, b, c, d, e, f
|
||||||
|
#define ARDUINOJSON_EXPAND7(a, b, c, d, e, f, g) a, b, c, d, e, f, g
|
||||||
|
#define ARDUINOJSON_EXPAND9(a, b, c, d, e, f, g, h, i) a, b, c, d, e, f, g, h, i
|
||||||
|
#define ARDUINOJSON_EXPAND18(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, \
|
||||||
|
q, r) \
|
||||||
|
a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r
|
||||||
|
|
||||||
|
#define ARDUINOJSON_CONCAT_(A, B) A##B
|
||||||
|
#define ARDUINOJSON_CONCAT2(A, B) ARDUINOJSON_CONCAT_(A, B)
|
||||||
|
#define ARDUINOJSON_CONCAT4(A, B, C, D) \
|
||||||
|
ARDUINOJSON_CONCAT2(ARDUINOJSON_CONCAT2(A, B), ARDUINOJSON_CONCAT2(C, D))
|
||||||
|
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0000() 0
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0001() 1
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0010() 2
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0011() 3
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0100() 4
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0101() 5
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0110() 6
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_0111() 7
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1000() 8
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1001() 9
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1010() A
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1011() B
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1100() C
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1101() D
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1110() E
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_1111() F
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT_(A, B, C, D) ARDUINOJSON_HEX_DIGIT_##A##B##C##D()
|
||||||
|
#define ARDUINOJSON_HEX_DIGIT(A, B, C, D) ARDUINOJSON_HEX_DIGIT_(A, B, C, D)
|
34
src/ArduinoJson/Polyfills/static_array.hpp
Normal file
34
src/ArduinoJson/Polyfills/static_array.hpp
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <ArduinoJson/Configuration.hpp>
|
||||||
|
|
||||||
|
#if ARDUINOJSON_ENABLE_PROGMEM
|
||||||
|
|
||||||
|
#include <ArduinoJson/Polyfills/pgmspace_generic.hpp>
|
||||||
|
|
||||||
|
#ifndef ARDUINOJSON_DEFINE_STATIC_ARRAY
|
||||||
|
#define ARDUINOJSON_DEFINE_STATIC_ARRAY(type, name, value) \
|
||||||
|
static type const name[] PROGMEM = value;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ARDUINOJSON_READ_STATIC_ARRAY
|
||||||
|
#define ARDUINOJSON_READ_STATIC_ARRAY(type, name, index) \
|
||||||
|
pgm_read<type>(name + index)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#else // i.e. ARDUINOJSON_ENABLE_PROGMEM == 0
|
||||||
|
|
||||||
|
#ifndef ARDUINOJSON_DEFINE_STATIC_ARRAY
|
||||||
|
#define ARDUINOJSON_DEFINE_STATIC_ARRAY(type, name, value) \
|
||||||
|
static type const name[] = value;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef ARDUINOJSON_READ_STATIC_ARRAY
|
||||||
|
#define ARDUINOJSON_READ_STATIC_ARRAY(type, name, index) name[index]
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
@ -15,6 +15,7 @@
|
|||||||
#include "type_traits/is_enum.hpp"
|
#include "type_traits/is_enum.hpp"
|
||||||
#include "type_traits/is_floating_point.hpp"
|
#include "type_traits/is_floating_point.hpp"
|
||||||
#include "type_traits/is_integral.hpp"
|
#include "type_traits/is_integral.hpp"
|
||||||
|
#include "type_traits/is_pointer.hpp"
|
||||||
#include "type_traits/is_same.hpp"
|
#include "type_traits/is_same.hpp"
|
||||||
#include "type_traits/is_signed.hpp"
|
#include "type_traits/is_signed.hpp"
|
||||||
#include "type_traits/is_unsigned.hpp"
|
#include "type_traits/is_unsigned.hpp"
|
||||||
|
16
src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp
Normal file
16
src/ArduinoJson/Polyfills/type_traits/is_pointer.hpp
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
// ArduinoJson - arduinojson.org
|
||||||
|
// Copyright Benoit Blanchon 2014-2020
|
||||||
|
// MIT License
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "integral_constant.hpp"
|
||||||
|
|
||||||
|
namespace ARDUINOJSON_NAMESPACE {
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct is_pointer : false_type {};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct is_pointer<T*> : true_type {};
|
||||||
|
} // namespace ARDUINOJSON_NAMESPACE
|
Reference in New Issue
Block a user