mirror of
				https://github.com/eledio-devices/thirdparty-ArduinoJson.git
				synced 2025-10-31 08:42:39 +01:00 
			
		
		
		
	Fix detection of char types
This commit is contained in:
		| @@ -86,6 +86,8 @@ TEST_CASE("custom_string") { | |||||||
|   CHECK(s.size() == 5); |   CHECK(s.size() == 5); | ||||||
| } | } | ||||||
|  |  | ||||||
|  | struct EmptyStruct {}; | ||||||
|  |  | ||||||
| TEST_CASE("IsString<T>") { | TEST_CASE("IsString<T>") { | ||||||
|   CHECK(IsString<std::string>::value == true); |   CHECK(IsString<std::string>::value == true); | ||||||
|   CHECK(IsString<std::basic_string<wchar_t> >::value == false); |   CHECK(IsString<std::basic_string<wchar_t> >::value == false); | ||||||
| @@ -95,6 +97,7 @@ TEST_CASE("IsString<T>") { | |||||||
|   CHECK(IsString<const char[8]>::value == true); |   CHECK(IsString<const char[8]>::value == true); | ||||||
|   CHECK(IsString< ::String>::value == true); |   CHECK(IsString< ::String>::value == true); | ||||||
|   CHECK(IsString< ::StringSumHelper>::value == true); |   CHECK(IsString< ::StringSumHelper>::value == true); | ||||||
|  |   CHECK(IsString<const EmptyStruct*>::value == false); | ||||||
| } | } | ||||||
|  |  | ||||||
| TEST_CASE("stringCompare") { | TEST_CASE("stringCompare") { | ||||||
|   | |||||||
| @@ -40,12 +40,8 @@ serialize(JsonVariantConst source, void* buffer, size_t bufferSize) { | |||||||
| } | } | ||||||
|  |  | ||||||
| template <template <typename> class TSerializer, typename TChar, size_t N> | template <template <typename> class TSerializer, typename TChar, size_t N> | ||||||
| #if defined _MSC_VER && _MSC_VER < 1900 | typename enable_if<IsChar<TChar>::value, size_t>::type serialize( | ||||||
| typename enable_if<sizeof(remove_reference<TChar>::type) == 1, size_t>::type |     JsonVariantConst source, TChar (&buffer)[N]) { | ||||||
| #else |  | ||||||
| typename enable_if<sizeof(TChar) == 1, size_t>::type |  | ||||||
| #endif |  | ||||||
| serialize(JsonVariantConst source, TChar (&buffer)[N]) { |  | ||||||
|   return serialize<TSerializer>(source, buffer, N); |   return serialize<TSerializer>(source, buffer, N); | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
| @@ -13,6 +13,10 @@ | |||||||
|  |  | ||||||
| namespace ARDUINOJSON_NAMESPACE { | namespace ARDUINOJSON_NAMESPACE { | ||||||
|  |  | ||||||
|  | template <typename T> | ||||||
|  | struct IsChar | ||||||
|  |     : integral_constant<bool, is_integral<T>::value && sizeof(T) == 1> {}; | ||||||
|  |  | ||||||
| class ZeroTerminatedRamString { | class ZeroTerminatedRamString { | ||||||
|  public: |  public: | ||||||
|   static const size_t typeSortKey = 3; |   static const size_t typeSortKey = 3; | ||||||
| @@ -58,7 +62,7 @@ class ZeroTerminatedRamString { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| template <typename TChar> | template <typename TChar> | ||||||
| struct StringAdapter<TChar*, typename enable_if<sizeof(TChar) == 1>::type> { | struct StringAdapter<TChar*, typename enable_if<IsChar<TChar>::value>::type> { | ||||||
|   typedef ZeroTerminatedRamString AdaptedString; |   typedef ZeroTerminatedRamString AdaptedString; | ||||||
|  |  | ||||||
|   static AdaptedString adapt(const TChar* p) { |   static AdaptedString adapt(const TChar* p) { | ||||||
| @@ -67,7 +71,7 @@ struct StringAdapter<TChar*, typename enable_if<sizeof(TChar) == 1>::type> { | |||||||
| }; | }; | ||||||
|  |  | ||||||
| template <typename TChar, size_t N> | template <typename TChar, size_t N> | ||||||
| struct StringAdapter<TChar[N], typename enable_if<sizeof(TChar) == 1>::type> { | struct StringAdapter<TChar[N], typename enable_if<IsChar<TChar>::value>::type> { | ||||||
|   typedef ZeroTerminatedRamString AdaptedString; |   typedef ZeroTerminatedRamString AdaptedString; | ||||||
|  |  | ||||||
|   static AdaptedString adapt(const TChar* p) { |   static AdaptedString adapt(const TChar* p) { | ||||||
| @@ -128,7 +132,7 @@ class SizedRamString { | |||||||
|  |  | ||||||
| template <typename TChar> | template <typename TChar> | ||||||
| struct SizedStringAdapter<TChar*, | struct SizedStringAdapter<TChar*, | ||||||
|                           typename enable_if<sizeof(TChar) == 1>::type> { |                           typename enable_if<IsChar<TChar>::value>::type> { | ||||||
|   typedef SizedRamString AdaptedString; |   typedef SizedRamString AdaptedString; | ||||||
|  |  | ||||||
|   static AdaptedString adapt(const TChar* p, size_t n) { |   static AdaptedString adapt(const TChar* p, size_t n) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user