diff options
Diffstat (limited to 'include/unicode/predicate.h')
-rw-r--r-- | include/unicode/predicate.h | 21 |
1 files changed, 21 insertions, 0 deletions
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<size_t bits_to_compare = 32, typename T> + 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 + |