7#include "../assert.hpp"
13 [[nodiscard]]
constexpr unicode_composition(
char32_t first,
char32_t second,
char32_t composed = 0) noexcept :
14 value(
static_cast<int64_t
>(first) << 42 |
static_cast<int64_t
>(second) << 21 |
static_cast<int64_t
>(composed))
16 tt_axiom(first <= 0x10'ffff);
17 tt_axiom(second <= 0x10'ffff);
18 tt_axiom(composed <= 0x10'ffff);
21 [[nodiscard]]
constexpr char32_t first()
const noexcept
23 return static_cast<char32_t>(value >> 42);
26 [[nodiscard]]
constexpr char32_t second()
const noexcept
28 return static_cast<char32_t>((value >> 21) & 0x1f'ffff);
31 [[nodiscard]]
constexpr char32_t composed()
const noexcept
33 return static_cast<char32_t>(value & 0x1f'ffff);
38 return lhs.value < rhs.value;
44 return (lhs.value >> 21) == (rhs.value >> 21);
52[[nodiscard]]
constexpr It unicode_composition_find(It first, It last,
unicode_composition value)
noexcept
55 if (it == last || *it != value) {
63[[nodiscard]]
constexpr It unicode_composition_find(It first, It last,
char32_t first_cp,
char32_t second_cp)
noexcept
65 return unicode_composition_find(first, last, unicode_composition{first_cp, second_cp});
71[[nodiscard]]
char32_t unicode_composition_find(
char32_t first,
char32_t second)
noexcept;
Definition unicode_composition.hpp:11