0d57370c9c
This reduces the size and alignment of all three comparison category types to a single byte. The partial_ordering::_M_is_ordered flag is replaced by the value 0x02 in the _M_value member. This also optimizes conversion and comparison operators to avoid conditional branches where possible, by comparing _M_value to constants or using bitwise operations to correctly handle the unordered state. * libsupc++/compare (__cmp_cat::type): Define typedef for underlying type of enumerations and comparison category types. (__cmp_cat::_Ord, __cmp_cat::_Ncmp): Add underlying type. (__cmp_cat::_Ncmp::unordered): Change value to 2. (partial_ordering::_M_value, weak_ordering::_M_value) (strong_ordering::_M_value): Change type to __cmp_cat::type. (partial_ordering::_M_is_ordered): Remove data member. (partial_ordering): Use second bit of _M_value for unordered. Adjust comparison operators. (weak_ordering::operator partial_ordering): Simplify to remove branches. (operator<=>(unspecified, weak_ordering)): Likewise. (strong_ordering::operator partial_ordering): Likewise. (strong_ordering::operator weak_ordering): Likewise. (operator<=>(unspecified, strong_ordering)): Likewise. * testsuite/18_support/comparisons/categories/partialord.cc: New test. * testsuite/18_support/comparisons/categories/strongord.cc: New test. * testsuite/18_support/comparisons/categories/weakord.cc: New test. |
||
---|---|---|
.. | ||
aligned_alloc | ||
bad_alloc | ||
bad_cast | ||
bad_exception | ||
bad_typeid | ||
byte | ||
comparisons | ||
exception | ||
exception_ptr | ||
headers | ||
initializer_list | ||
launder | ||
max_align_t/requirements | ||
nested_exception | ||
numeric_limits | ||
quick_exit | ||
type_info | ||
uncaught_exception | ||
uncaught_exceptions | ||
50594.cc | ||
51333.cc | ||
cxa_vec.cc | ||
destroying_delete.cc | ||
free_eh_pool.cc | ||
new_aligned.cc | ||
new_delete_placement.cc | ||
new_handler.cc | ||
new_nothrow.cc | ||
pthread_guard.cc | ||
set_terminate.cc | ||
set_unexpected.cc | ||
terminate_handler.cc | ||
unexpected_handler.cc |