Adjust hb_is_signed<>

Fixes https://github.com/harfbuzz/harfbuzz/issues/1535
This commit is contained in:
Behdad Esfahbod 2019-01-31 13:56:58 -08:00
parent 21ea1c9152
commit 1e06282105
1 changed files with 9 additions and 18 deletions

View File

@ -299,24 +299,15 @@ hb_ceil_to_4 (unsigned int v)
}
template <typename T> struct hb_is_signed;
template <> struct hb_is_signed<signed char> { enum { value = true }; };
template <> struct hb_is_signed<signed short> { enum { value = true }; };
template <> struct hb_is_signed<signed int> { enum { value = true }; };
template <> struct hb_is_signed<signed long> { enum { value = true }; };
template <> struct hb_is_signed<unsigned char> { enum { value = false }; };
template <> struct hb_is_signed<unsigned short> { enum { value = false }; };
template <> struct hb_is_signed<unsigned int> { enum { value = false }; };
template <> struct hb_is_signed<unsigned long> { enum { value = false }; };
/* We need to define hb_is_signed for the typedefs we use on pre-Visual
* Studio 2010 for the int8_t type, since __int8/__int64 is not considered
* the same as char/long. The previous lines will suffice for the other
* types, though. Note that somehow, unsigned __int8 is considered same
* as unsigned char.
* https://github.com/harfbuzz/harfbuzz/pull/1499
*/
#if defined(_MSC_VER) && (_MSC_VER < 1600)
template <> struct hb_is_signed<__int8> { enum { value = true }; };
#endif
/* https://github.com/harfbuzz/harfbuzz/issues/1535 */
template <> struct hb_is_signed<int8_t> { enum { value = true }; };
template <> struct hb_is_signed<int16_t> { enum { value = true }; };
template <> struct hb_is_signed<int32_t> { enum { value = true }; };
template <> struct hb_is_signed<int64_t> { enum { value = true }; };
template <> struct hb_is_signed<uint8_t> { enum { value = false }; };
template <> struct hb_is_signed<uint16_t> { enum { value = false }; };
template <> struct hb_is_signed<uint32_t> { enum { value = false }; };
template <> struct hb_is_signed<uint64_t> { enum { value = false }; };
template <typename T> static inline bool
hb_in_range (T u, T lo, T hi)