From d2c0c94f0b76fbae9dd5a7b7cb81b9b53db8be0e Mon Sep 17 00:00:00 2001
From: bunnei <bunneidev@gmail.com>
Date: Fri, 4 Dec 2020 23:46:37 -0800
Subject: [PATCH] common: BitSet: Various style fixes based on code review
 feedback.

---
 src/common/bit_set.h | 45 ++++++++++++++++++++++----------------------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/src/common/bit_set.h b/src/common/bit_set.h
index 4f966de40e..9235ad4128 100644
--- a/src/common/bit_set.h
+++ b/src/common/bit_set.h
@@ -16,6 +16,9 @@
 
 #pragma once
 
+#include <array>
+#include <bit>
+
 #include "common/alignment.h"
 #include "common/bit_util.h"
 #include "common/common_types.h"
@@ -24,33 +27,11 @@ namespace Common {
 
 namespace impl {
 
-#define BITSIZEOF(x) (sizeof(x) * CHAR_BIT)
-
 template <typename Storage, size_t N>
 class BitSet {
-private:
-    static_assert(std::is_integral<Storage>::value);
-    static_assert(std::is_unsigned<Storage>::value);
-    static_assert(sizeof(Storage) <= sizeof(u64));
-
-    static constexpr size_t FlagsPerWord = BITSIZEOF(Storage);
-    static constexpr size_t NumWords = AlignUp(N, FlagsPerWord) / FlagsPerWord;
-
-    static constexpr auto CountLeadingZeroImpl(Storage word) {
-        return CountLeadingZeroes64(static_cast<unsigned long long>(word)) -
-               (BITSIZEOF(unsigned long long) - FlagsPerWord);
-    }
-
-    static constexpr Storage GetBitMask(size_t bit) {
-        return Storage(1) << (FlagsPerWord - 1 - bit);
-    }
-
-private:
-    Storage words[NumWords];
 
 public:
-    constexpr BitSet() : words() { /* ... */
-    }
+    constexpr BitSet() = default;
 
     constexpr void SetBit(size_t i) {
         this->words[i / FlagsPerWord] |= GetBitMask(i % FlagsPerWord);
@@ -81,6 +62,24 @@ public:
         }
         return FlagsPerWord * NumWords;
     }
+
+private:
+    static_assert(std::is_unsigned_v<Storage>);
+    static_assert(sizeof(Storage) <= sizeof(u64));
+
+    static constexpr size_t FlagsPerWord = BitSize<Storage>();
+    static constexpr size_t NumWords = AlignUp(N, FlagsPerWord) / FlagsPerWord;
+
+    static constexpr auto CountLeadingZeroImpl(Storage word) {
+        return std::countl_zero(static_cast<unsigned long long>(word)) -
+               (BitSize<unsigned long long>() - FlagsPerWord);
+    }
+
+    static constexpr Storage GetBitMask(size_t bit) {
+        return Storage(1) << (FlagsPerWord - 1 - bit);
+    }
+
+    std::array<Storage, NumWords> words{};
 };
 
 } // namespace impl