[dawn] Implement `HasOneBit()` with C++20 `std::has_single_bit()`
Bug: 343500108
Change-Id: Iaf360ab6f185fa2f95af7c8a62de6efd6b244e77
Reviewed-on: https://dawn-review.googlesource.com/c/dawn/+/239485
Reviewed-by: Corentin Wallez <cwallez@chromium.org>
Reviewed-by: Loko Kung <lokokung@google.com>
Commit-Queue: Jiawei Shao <jiawei.shao@intel.com>
diff --git a/src/dawn/native/EnumClassBitmasks.h b/src/dawn/native/EnumClassBitmasks.h
index 770cd8f..e981957 100644
--- a/src/dawn/native/EnumClassBitmasks.h
+++ b/src/dawn/native/EnumClassBitmasks.h
@@ -28,6 +28,8 @@
#ifndef SRC_DAWN_NATIVE_ENUMCLASSBITMASKS_H_
#define SRC_DAWN_NATIVE_ENUMCLASSBITMASKS_H_
+#include <bit>
+
#include "webgpu/webgpu_enum_class_bitmasks.h"
namespace dawn::native {
@@ -44,7 +46,8 @@
template <typename T>
constexpr bool HasOneBit(T value) {
- return HasZeroOrOneBits(value) && value != T(0);
+ using Integral = typename std::underlying_type<T>::type;
+ return std::has_single_bit(static_cast<Integral>(value));
}
} // namespace dawn::native