18 namespace __ESIMD_EDNS {
20 template <
unsigned int N,
unsigned int M>
21 constexpr
unsigned int roundUpNextMultiple() {
22 return ((N + M - 1) / M) * M;
26 template <
typename...>
struct is_one_of {
27 static constexpr
bool value =
false;
30 template <
typename Checked,
typename First,
typename... Other>
31 struct is_one_of<Checked, First, Other...> {
32 static constexpr
bool value =
33 std::is_same<typename std::remove_const<Checked>::type,
34 typename std::remove_const<First>::type>::value ||
35 is_one_of<Checked, Other...>::value;
37 template <
typename Checked,
typename...
T>
38 inline constexpr
bool is_one_of_v = is_one_of<Checked,
T...>::value;
42 template <
typename enumClass, enumClass... E>
struct is_one_of_enum {
43 static constexpr
bool value =
false;
46 template <
typename enumClass, enumClass Checked, enumClass First,
48 struct is_one_of_enum<enumClass, Checked, First, Else...> {
49 static constexpr
bool value =
50 (Checked == First) || is_one_of_enum<enumClass, Checked, Else...>::value;
52 template <
typename enumClass, enumClass...
T>
53 inline constexpr
bool is_one_of_enum_v = is_one_of_enum<enumClass,
T...>::value;