25#ifndef JOIN_DATA_UTF16_HPP
26#define JOIN_DATA_UTF16_HPP
46 return (unit - 0xD800) < 0x800;
56 return (unit - 0xD800) < 0x400;
66 return (unit - 0xDC00) < 0x400;
76 return 0xD800 + ((codepoint - 0x10000) >> 10);
86 return 0xDC00 + (codepoint & 0x3FF);
95 constexpr uint32_t
combine (uint32_t high, uint32_t low)
noexcept
97 return 0x10000 + (((high - 0xD800) << 10) | (low - 0xDC00));
107 inline int decode (
const char16_t*& cur,
const char16_t* end, uint32_t& codepoint)
noexcept
109 uint32_t u0 = cur[0];
123 codepoint =
combine (u0, cur[1]);
134 inline size_t encode (uint32_t codepoint,
char16_t* out)
noexcept
138 out[0] =
static_cast<char16_t> (codepoint);
143 out[1] =
static_cast<char16_t> (
lowSurrogate (codepoint));
size_t encode(uint32_t codepoint, char16_t *out) noexcept
encode one codepoint to UTF-16.
Definition utf16.hpp:134
constexpr uint32_t highSurrogate(uint32_t codepoint) noexcept
get the high surrogate of a supplementary codepoint.
Definition utf16.hpp:74
int decode(const char16_t *&cur, const char16_t *end, uint32_t &codepoint) noexcept
decode one codepoint from UTF-16.
Definition utf16.hpp:107
constexpr uint32_t combine(uint32_t high, uint32_t low) noexcept
combine a surrogate pair into a codepoint.
Definition utf16.hpp:95
constexpr bool isHighSurrogate(uint32_t unit) noexcept
check if code unit is a high surrogate.
Definition utf16.hpp:54
constexpr uint32_t lowSurrogate(uint32_t codepoint) noexcept
get the low surrogate of a supplementary codepoint.
Definition utf16.hpp:84
constexpr bool isSurrogate(uint32_t unit) noexcept
check if code unit is a surrogate.
Definition utf16.hpp:44
constexpr bool isLowSurrogate(uint32_t unit) noexcept
check if code unit is a low surrogate.
Definition utf16.hpp:64
Definition acceptor.hpp:32
#define JOIN_LIKELY(x)
Definition utils.hpp:50
#define JOIN_UNLIKELY(x)
Definition utils.hpp:51