14 using value_type = uint64_t;
25 [[nodiscard]]
constexpr friend bool operator==(
agrapheme const &lhs,
agrapheme const &rhs)
noexcept =
default;
27 [[nodiscard]]
constexpr friend std::partial_ordering operator<=>(
agrapheme const &lhs,
agrapheme const &rhs)
noexcept
29 return lhs.grapheme() <=> rhs.grapheme();
32 [[nodiscard]]
constexpr bool empty() const noexcept
37 constexpr explicit operator bool() const noexcept
42 [[nodiscard]]
size_t hash() const noexcept
47 [[nodiscard]]
constexpr hi::grapheme grapheme() const noexcept
49 return std::bit_cast<hi::grapheme>(truncate<uint32_t>(_value >> 43));
52 [[nodiscard]]
constexpr text_phrasing phrasing() const noexcept
54 return static_cast<text_phrasing
>((_value >> 39) & 0xf);
57 [[nodiscard]]
constexpr iso_639 language() const noexcept
59 return std::bit_cast<iso_639>(truncate<uint16_t>(_value >> 16));
62 [[nodiscard]]
constexpr text_style style() const noexcept
64 return std::bit_cast<text_style>(truncate<uint16_t>(_value));
67 [[nodiscard]] text_sub_style sub_style(iso_15924 script = iso_15924{})
const noexcept
69 return style().sub_style(phrasing(), language(), script);