11 std::same_as<Context, iso_15924> or std::same_as<Context, language_tag> or std::same_as<Context, text_phrasing>;
15 using value_type = uint64_t;
32 hi_axiom(_value < (value_type{1} << 39));
35 [[nodiscard]]
constexpr value_type
const& intrinsic()
const
40 [[nodiscard]]
constexpr value_type& intrinsic()
45 [[nodiscard]]
constexpr hi::text_phrasing phrasing()
const noexcept
47 return static_cast<hi::text_phrasing
>((_value >> _phrasing_shift) & _phrasing_mask);
52 hilet phrasing_value = wide_cast<value_type>(to_underlying(phrasing));
53 hi_axiom(phrasing_value <= _phrasing_mask);
54 _value &= ~(_phrasing_mask << _phrasing_shift);
55 _value |= phrasing_value << _phrasing_shift;
59 [[nodiscard]]
constexpr iso_639 language()
const noexcept
61 return iso_639{
intrinsic_t{}, (_value >> _language_shift) & _language_mask};
66 hilet language_value = wide_cast<value_type>(language.intrinsic());
67 hi_axiom(language_value <= _language_mask);
68 _value &= ~(_language_mask << _language_shift);
69 _value |= language_value << _language_shift;
73 [[nodiscard]]
constexpr iso_15924 script()
const noexcept
75 return iso_15924{
intrinsic_t{}, (_value >> _script_shift) & _script_mask};
80 hilet script_value = wide_cast<value_type>(script.intrinsic());
81 hi_axiom(script_value <= _script_mask);
82 _value &= ~(_script_mask << _script_shift);
83 _value |= script_value << _script_shift;
87 [[nodiscard]]
constexpr iso_3166 region()
const noexcept
89 return iso_3166{
intrinsic_t{}, (_value >> _region_shift) & _region_mask};
94 hilet region_value = wide_cast<value_type>(region.intrinsic());
95 hi_axiom(region_value <= _region_mask);
96 _value &= ~(_region_mask << _region_shift);
97 _value |= region_value << _region_shift;
101 constexpr hi::language_tag language_tag()
const noexcept
103 return {language(), script(), region()};
108 return set_language(language_tag.language).set_script(language_tag.script).set_region(language_tag.region);
111 template<character_attribute... Args>
117 constexpr void add()
noexcept {}
119 constexpr void add(iso_639
const& arg)
noexcept
124 constexpr void add(iso_15924
const& arg)
noexcept
129 constexpr void add(iso_3166
const& arg)
noexcept
134 constexpr void add(hi::language_tag
const &arg)
noexcept
136 set_language_tag(arg);
139 constexpr void add(text_phrasing
const& arg)
noexcept
144 template<character_attribute First, character_attribute Second, character_attribute... Rest>
145 constexpr void add(First
const& first, Second
const& second, Rest
const&...rest)
noexcept
148 add(second, rest...);
152 constexpr static auto _phrasing_mask = value_type{0xf};
153 constexpr static auto _phrasing_shift = 35U;
154 constexpr static auto _region_mask = value_type{0x3ff};
155 constexpr static auto _region_shift = 25U;
156 constexpr static auto _script_mask = value_type{0x3ff};
157 constexpr static auto _script_shift = 15U;
158 constexpr static auto _language_mask = value_type{0x7fff};
159 constexpr static auto _language_shift = 0U;
168 value_type _value = {};
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253