17 using value_type = uint64_t;
28 [[nodiscard]]
constexpr friend bool operator==(
agrapheme const &lhs,
agrapheme const &rhs)
noexcept =
default;
30 [[nodiscard]]
constexpr friend std::partial_ordering operator<=>(
agrapheme const &lhs,
agrapheme const &rhs)
noexcept
32 return lhs.grapheme() <=> rhs.grapheme();
35 [[nodiscard]]
constexpr bool empty() const noexcept
40 constexpr explicit operator bool() const noexcept
45 [[nodiscard]]
size_t hash() const noexcept
50 [[nodiscard]]
constexpr hi::grapheme
grapheme() const noexcept
52 return std::bit_cast<hi::grapheme>(truncate<uint32_t>(_value >> 43));
55 [[nodiscard]]
constexpr text_phrasing phrasing() const noexcept
60 [[nodiscard]]
constexpr iso_639 language() const noexcept
62 return std::bit_cast<iso_639>(truncate<uint16_t>(_value >> 16));
65 [[nodiscard]]
constexpr text_style style() const noexcept
67 return std::bit_cast<text_style>(truncate<uint16_t>(_value));
70 [[nodiscard]] text_sub_style sub_style(iso_15924 script = iso_15924{})
const noexcept
72 return style().sub_style(phrasing(), language(), script);