diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2022-02-22 13:32:04 +0100 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2022-02-22 17:09:48 +0100 |
commit | 8187737a7844fe4669f80bf0e8ef0950148dc58f (patch) | |
tree | e2e42500d1a72de607919b46ae2e6387d0b1db30 /include/rtl | |
parent | aa12351db402180eca4a4ed497f32efbd9b22db9 (diff) |
Restrict the converting rtl::isAscii* overloads
...to types that can be converted to sal_uInt32 without loss
Change-Id: Iad83591c6b70bf5efe1b6b14bacf1b6e9a225295
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/130348
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
Diffstat (limited to 'include/rtl')
-rw-r--r-- | include/rtl/character.hxx | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/include/rtl/character.hxx b/include/rtl/character.hxx index 9585e16cafa4..5801063532da 100644 --- a/include/rtl/character.hxx +++ b/include/rtl/character.hxx @@ -31,6 +31,10 @@ #include "sal/types.h" +#if defined LIBO_INTERNAL_ONLY +#include <type_traits> +#endif + namespace rtl { /** Check for Unicode code point. @@ -60,7 +64,12 @@ inline SAL_CONSTEXPR bool isAscii(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAscii(char) = delete; bool isAscii(signed char) = delete; -template <typename T> inline constexpr bool isAscii(T code) { return isAscii(sal_uInt32(code)); } +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAscii(T code) +{ + return isAscii(sal_uInt32(code)); +} #endif /** Check for ASCII lower case character. @@ -81,7 +90,9 @@ inline SAL_CONSTEXPR bool isAsciiLowerCase(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiLowerCase(char) = delete; bool isAsciiLowerCase(signed char) = delete; -template <typename T> inline constexpr bool isAsciiLowerCase(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiLowerCase(T code) { return isAsciiLowerCase(sal_uInt32(code)); } @@ -105,7 +116,9 @@ inline SAL_CONSTEXPR bool isAsciiUpperCase(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiUpperCase(char) = delete; bool isAsciiUpperCase(signed char) = delete; -template <typename T> inline constexpr bool isAsciiUpperCase(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiUpperCase(T code) { return isAsciiUpperCase(sal_uInt32(code)); } @@ -129,7 +142,9 @@ inline SAL_CONSTEXPR bool isAsciiAlpha(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiAlpha(char) = delete; bool isAsciiAlpha(signed char) = delete; -template <typename T> inline constexpr bool isAsciiAlpha(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiAlpha(T code) { return isAsciiAlpha(sal_uInt32(code)); } @@ -153,7 +168,9 @@ inline SAL_CONSTEXPR bool isAsciiDigit(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiDigit(char) = delete; bool isAsciiDigit(signed char) = delete; -template <typename T> inline constexpr bool isAsciiDigit(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiDigit(T code) { return isAsciiDigit(sal_uInt32(code)); } @@ -177,7 +194,9 @@ inline SAL_CONSTEXPR bool isAsciiAlphanumeric(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiAlphanumeric(char) = delete; bool isAsciiAlphanumeric(signed char) = delete; -template <typename T> inline constexpr bool isAsciiAlphanumeric(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiAlphanumeric(T code) { return isAsciiAlphanumeric(sal_uInt32(code)); } @@ -201,7 +220,9 @@ inline SAL_CONSTEXPR bool isAsciiCanonicHexDigit(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiCanonicHexDigit(char) = delete; bool isAsciiCanonicHexDigit(signed char) = delete; -template <typename T> inline constexpr bool isAsciiCanonicHexDigit(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiCanonicHexDigit(T code) { return isAsciiCanonicHexDigit(sal_uInt32(code)); } @@ -225,7 +246,9 @@ inline SAL_CONSTEXPR bool isAsciiHexDigit(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiHexDigit(char) = delete; bool isAsciiHexDigit(signed char) = delete; -template <typename T> inline constexpr bool isAsciiHexDigit(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiHexDigit(T code) { return isAsciiHexDigit(sal_uInt32(code)); } @@ -248,7 +271,9 @@ inline SAL_CONSTEXPR bool isAsciiOctalDigit(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiOctalDigit(char) = delete; bool isAsciiOctalDigit(signed char) = delete; -template <typename T> inline constexpr bool isAsciiOctalDigit(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiOctalDigit(T code) { return isAsciiOctalDigit(sal_uInt32(code)); } @@ -273,7 +298,9 @@ inline SAL_CONSTEXPR bool isAsciiWhiteSpace(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY bool isAsciiWhiteSpace(char) = delete; bool isAsciiWhiteSpace(signed char) = delete; -template <typename T> inline constexpr bool isAsciiWhiteSpace(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), bool> +isAsciiWhiteSpace(T code) { return isAsciiWhiteSpace(sal_uInt32(code)); } @@ -296,7 +323,10 @@ inline SAL_CONSTEXPR sal_uInt32 toAsciiUpperCase(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY sal_uInt32 toAsciiUpperCase(char) = delete; sal_uInt32 toAsciiUpperCase(signed char) = delete; -template <typename T> inline constexpr sal_uInt32 toAsciiUpperCase(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), + sal_uInt32> +toAsciiUpperCase(T code) { return toAsciiUpperCase(sal_uInt32(code)); } @@ -319,7 +349,10 @@ inline SAL_CONSTEXPR sal_uInt32 toAsciiLowerCase(sal_uInt32 code) #if defined LIBO_INTERNAL_ONLY sal_uInt32 toAsciiLowerCase(char) = delete; sal_uInt32 toAsciiLowerCase(signed char) = delete; -template <typename T> inline constexpr sal_uInt32 toAsciiLowerCase(T code) +template <typename T> +inline constexpr std::enable_if_t<std::is_integral_v<T> && sizeof(T) <= sizeof(sal_uInt32), + sal_uInt32> +toAsciiLowerCase(T code) { return toAsciiLowerCase(sal_uInt32(code)); } |