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;
27 hi_axiom(_value < (value_type{1} << 40));
30 [[nodiscard]]
constexpr value_type
const& intrinsic()
const
35 [[nodiscard]]
constexpr value_type& intrinsic()
40 [[nodiscard]]
constexpr hi::text_phrasing phrasing()
const noexcept
42 return static_cast<hi::text_phrasing
>((_value >> _phrasing_shift) & _phrasing_mask);
47 hilet phrasing_value = wide_cast<value_type>(to_underlying(phrasing));
48 hi_axiom(phrasing_value <= _phrasing_mask);
49 _value &= ~(_phrasing_mask << _phrasing_shift);
50 _value |= phrasing_value << _phrasing_shift;
54 [[nodiscard]]
constexpr iso_639 language()
const noexcept
56 return iso_639{
intrinsic_t{}, (_value >> _language_shift) & _language_mask};
61 hilet language_value = wide_cast<value_type>(language.intrinsic());
62 hi_axiom(language_value <= _language_mask);
63 _value &= ~(_language_mask << _language_shift);
64 _value |= language_value << _language_shift;
68 [[nodiscard]]
constexpr iso_15924 script()
const noexcept
70 return iso_15924{
intrinsic_t{}, (_value >> _script_shift) & _script_mask};
75 hilet script_value = wide_cast<value_type>(script.intrinsic());
76 hi_axiom(script_value <= _script_mask);
77 _value &= ~(_script_mask << _script_shift);
78 _value |= script_value << _script_shift;
82 [[nodiscard]]
constexpr iso_3166 region()
const noexcept
84 return iso_3166{
intrinsic_t{}, (_value >> _region_shift) & _region_mask};
89 hilet region_value = wide_cast<value_type>(region.intrinsic());
90 hi_axiom(region_value <= _region_mask);
91 _value &= ~(_region_mask << _region_shift);
92 _value |= region_value << _region_shift;
98 return set_language(language_tag.language).set_script(language_tag.script).set_region(language_tag.region);
101 template<character_attribute... Args>
107 constexpr void add()
noexcept {}
109 constexpr void add(iso_639
const& arg)
noexcept
114 constexpr void add(iso_15924
const& arg)
noexcept
119 constexpr void add(iso_3166
const& arg)
noexcept
124 constexpr void add(language_tag
const &arg)
noexcept
129 constexpr void add(text_phrasing
const& arg)
noexcept
134 template<character_attribute First, character_attribute Second, character_attribute... Rest>
135 constexpr void add(First
const& first, Second
const& second, Rest
const&...rest)
noexcept
138 add(second, rest...);
142 constexpr static auto _phrasing_mask = value_type{0xf};
143 constexpr static auto _phrasing_shift = 35U;
144 constexpr static auto _region_mask = value_type{0x3ff};
145 constexpr static auto _region_shift = 25U;
146 constexpr static auto _script_mask = value_type{0x3ff};
147 constexpr static auto _script_shift = 15U;
148 constexpr static auto _language_mask = value_type{0x7fff};
149 constexpr static auto _language_shift = 0U;
#define hi_axiom(expression,...)
Specify an axiom; an expression that is true.
Definition assert.hpp:253