typename KeyFunctorT = identity<unsigned>,
typename SparseT = uint8_t>
class SparseMultiSet {
- static_assert(std::numeric_limits<SparseT>::is_integer &&
- !std::numeric_limits<SparseT>::is_signed,
+ static_assert(std::is_unsigned_v<SparseT>,
"SparseT must be an unsigned integer type");
/// The actual data that's stored, as a doubly-linked list implemented via
typename KeyFunctorT = identity<unsigned>,
typename SparseT = uint8_t>
class SparseSet {
- static_assert(std::numeric_limits<SparseT>::is_integer &&
- !std::numeric_limits<SparseT>::is_signed,
+ static_assert(std::is_unsigned_v<SparseT>,
"SparseT must be an unsigned integer type");
using KeyT = typename KeyFunctorT::argument_type;
/// valid arguments.
template <typename T>
unsigned countTrailingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
- static_assert(std::numeric_limits<T>::is_integer &&
- !std::numeric_limits<T>::is_signed,
+ static_assert(std::is_unsigned_v<T>,
"Only unsigned integral types are allowed.");
return llvm::detail::TrailingZerosCounter<T, sizeof(T)>::count(Val, ZB);
}
/// valid arguments.
template <typename T>
unsigned countLeadingZeros(T Val, ZeroBehavior ZB = ZB_Width) {
- static_assert(std::numeric_limits<T>::is_integer &&
- !std::numeric_limits<T>::is_signed,
+ static_assert(std::is_unsigned_v<T>,
"Only unsigned integral types are allowed.");
return llvm::detail::LeadingZerosCounter<T, sizeof(T)>::count(Val, ZB);
}
/// ZB_Undefined are valid arguments.
template <typename T>
unsigned countLeadingOnes(T Value, ZeroBehavior ZB = ZB_Width) {
- static_assert(std::numeric_limits<T>::is_integer &&
- !std::numeric_limits<T>::is_signed,
+ static_assert(std::is_unsigned_v<T>,
"Only unsigned integral types are allowed.");
return countLeadingZeros<T>(~Value, ZB);
}
/// ZB_Undefined are valid arguments.
template <typename T>
unsigned countTrailingOnes(T Value, ZeroBehavior ZB = ZB_Width) {
- static_assert(std::numeric_limits<T>::is_integer &&
- !std::numeric_limits<T>::is_signed,
+ static_assert(std::is_unsigned_v<T>,
"Only unsigned integral types are allowed.");
return countTrailingZeros<T>(~Value, ZB);
}
/// Returns 0 if the word is zero.
template <typename T>
inline unsigned countPopulation(T Value) {
- static_assert(std::numeric_limits<T>::is_integer &&
- !std::numeric_limits<T>::is_signed,
+ static_assert(std::is_unsigned_v<T>,
"Only unsigned integral types are allowed.");
return (unsigned)llvm::popcount(Value);
}