From 52d4375b10d920a59f1309c272a2e525feb1c25d Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sat, 1 Jan 2022 20:25:34 +0100 Subject: Separated out headers files; optimizations; type traits; better naming --- include/unicode/predicate.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 include/unicode/predicate.h (limited to 'include/unicode/predicate.h') diff --git a/include/unicode/predicate.h b/include/unicode/predicate.h new file mode 100644 index 0000000..5f8c6a4 --- /dev/null +++ b/include/unicode/predicate.h @@ -0,0 +1,21 @@ +#pragma once + +namespace unicode { + + // bits_to_compare: limit bits to consider even further than defined by T + // T: usually, char32_t, uint32_t etc. + template + static inline bool is_valid_unicode(const T& value) noexcept + { + if constexpr(sizeof(T) == 1 || bits_to_compare <= 15) + return true; + else if constexpr(sizeof(T) == 2 || bits_to_compare <= 20) + //return value <= 0xD7FF || value >= 0xE000; + return (value & 0xF800) != 0xD800; + else + //return (value & 0xFFFFF800) != 0x0000D800 && (value >> 16) <= 0x10; + return value <= 0xD7FF || (value >= 0xE000 && value <= 0x10FFFF); + } + +} // namespace unicode + -- cgit v1.2.3