19 using char_type = char;
21 [[nodiscard]]
constexpr std::endian guess_endian(
void const *ptr,
size_t size, std::endian endian)
const noexcept
23 return std::endian::native;
26 template<
typename It,
typename EndIt>
31 hilet c = char_cast<char32_t>(*it++);
35 return {0xfffd,
false};
41 hi_axiom(code_point < 0x11'0000);
42 hi_axiom(not(code_point >= 0xd800 and code_point < 0xe000));
44 if (code_point < 0x80) {
45 return {uint8_t{1},
true};
48 return {uint8_t{1},
false};
53 constexpr void write(
char32_t code_point, It& dst)
const noexcept
55 hi_axiom(code_point < 0x11'0000);
56 hi_axiom(not(code_point >= 0xd800 and code_point < 0xe000));
58 if (code_point < 0x80) {
59 *dst++ = char_cast<char>(code_point);
66#if defined(HI_HAS_SSE2)
68 hi_force_inline __m128i read_ascii_chunk16(It it)
const noexcept
70 return _mm_loadu_si128(
reinterpret_cast<__m128i
const *
>(
std::addressof(*it)));
74 hi_force_inline
void write_ascii_chunk16(__m128i chunk, It dst)
const noexcept
76 _mm_storeu_si128(
reinterpret_cast<__m128i *
>(
std::addressof(*dst)), chunk);