[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