Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
convertNumber.hpp
00001 // ArduinoJson - arduinojson.org 00002 // Copyright Benoit Blanchon 2014-2021 00003 // MIT License 00004 00005 #pragma once 00006 00007 #if defined(__clang__) 00008 #pragma clang diagnostic push 00009 #pragma clang diagnostic ignored "-Wconversion" 00010 #elif defined(__GNUC__) 00011 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) 00012 #pragma GCC diagnostic push 00013 #endif 00014 #pragma GCC diagnostic ignored "-Wconversion" 00015 #endif 00016 00017 #include <ArduinoJson/Numbers/Float.hpp> 00018 #include <ArduinoJson/Numbers/FloatTraits.hpp> 00019 #include <ArduinoJson/Numbers/Integer.hpp> 00020 #include <ArduinoJson/Polyfills/limits.hpp> 00021 00022 namespace ARDUINOJSON_NAMESPACE { 00023 00024 template <typename TOut, typename TIn> 00025 typename enable_if<is_integral<TOut>::value && sizeof(TOut) <= sizeof(TIn), 00026 bool>::type 00027 canStorePositiveInteger(TIn value) { 00028 return value <= TIn(numeric_limits<TOut>::highest()); 00029 } 00030 00031 template <typename TOut, typename TIn> 00032 typename enable_if<is_integral<TOut>::value && sizeof(TIn) < sizeof(TOut), 00033 bool>::type 00034 canStorePositiveInteger(TIn) { 00035 return true; 00036 } 00037 00038 template <typename TOut, typename TIn> 00039 typename enable_if<is_floating_point<TOut>::value, bool>::type 00040 canStorePositiveInteger(TIn) { 00041 return true; 00042 } 00043 00044 template <typename TOut, typename TIn> 00045 typename enable_if<is_floating_point<TOut>::value, bool>::type 00046 canStoreNegativeInteger(TIn) { 00047 return true; 00048 } 00049 00050 template <typename TOut, typename TIn> 00051 typename enable_if<is_integral<TOut>::value && is_signed<TOut>::value && 00052 sizeof(TOut) <= sizeof(TIn), 00053 bool>::type 00054 canStoreNegativeInteger(TIn value) { 00055 return value <= TIn(numeric_limits<TOut>::highest()) + 1; 00056 } 00057 00058 template <typename TOut, typename TIn> 00059 typename enable_if<is_integral<TOut>::value && is_signed<TOut>::value && 00060 sizeof(TIn) < sizeof(TOut), 00061 bool>::type 00062 canStoreNegativeInteger(TIn) { 00063 return true; 00064 } 00065 00066 template <typename TOut, typename TIn> 00067 typename enable_if<is_integral<TOut>::value && is_unsigned<TOut>::value, 00068 bool>::type 00069 canStoreNegativeInteger(TIn) { 00070 return false; 00071 } 00072 00073 template <typename TOut, typename TIn> 00074 TOut convertPositiveInteger(TIn value) { 00075 return canStorePositiveInteger<TOut>(value) ? TOut(value) : 0; 00076 } 00077 00078 template <typename TOut, typename TIn> 00079 TOut convertNegativeInteger(TIn value) { 00080 return canStoreNegativeInteger<TOut>(value) ? TOut(~value + 1) : 0; 00081 } 00082 00083 template <typename TOut, typename TIn> 00084 typename enable_if<is_floating_point<TOut>::value, TOut>::type convertFloat( 00085 TIn value) { 00086 return TOut(value); 00087 } 00088 00089 template <typename TOut, typename TIn> 00090 typename enable_if<!is_floating_point<TOut>::value, TOut>::type convertFloat( 00091 TIn value) { 00092 return value >= numeric_limits<TOut>::lowest() && 00093 value <= numeric_limits<TOut>::highest() 00094 ? TOut(value) 00095 : 0; 00096 } 00097 } // namespace ARDUINOJSON_NAMESPACE 00098 00099 #if defined(__clang__) 00100 #pragma clang diagnostic pop 00101 #elif defined(__GNUC__) 00102 #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6) 00103 #pragma GCC diagnostic pop 00104 #endif 00105 #endif
Generated on Wed Jul 13 2022 01:10:36 by
1.7.2