summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLéo Lam <leo@leolam.fr>2022-04-19 00:31:43 +0200
committerLéo Lam <leo@leolam.fr>2022-04-19 00:32:23 +0200
commitbcaacf0700c4f458bb4fbbb2fe0210555d8b2227 (patch)
tree4743587f998ca5807593df447744a3e5e427c1f1
parent58a008dfca1894735bb8ff963167865eaed8c69c (diff)
Remove BitSet as sead::LongBitFlag is equivalent
-rw-r--r--src/KingSystem/Utils/BitSet.h115
1 files changed, 0 insertions, 115 deletions
diff --git a/src/KingSystem/Utils/BitSet.h b/src/KingSystem/Utils/BitSet.h
deleted file mode 100644
index ad48fc3d..00000000
--- a/src/KingSystem/Utils/BitSet.h
+++ /dev/null
@@ -1,115 +0,0 @@
-#pragma once
-
-#include <array>
-#include <basis/seadTypes.h>
-#include <math/seadMathCalcCommon.h>
-#include <prim/seadBitFlag.h>
-
-namespace ksys::util {
-
-template <int N>
-class BitSet {
-public:
- using Word = u32;
-
- void makeAllZero() { mStorage.fill(0); }
- void makeAllOne() { mStorage.fill(~Word(0)); }
-
- Word& getWord(int bit);
- const Word& getWord(int bit) const;
-
- bool isZero() const;
-
- void setBit(int bit);
- void resetBit(int bit);
- void changeBit(int bit, bool on);
- void toggleBit(int bit);
- bool isOnBit(int bit) const;
- bool isOffBit(int bit) const;
-
- /// Popcount.
- int countOnBit() const;
- int countRightOnBit(int bit) const;
-
- static Word makeMask(int bit) { return 1u << (bit % BitsPerWord); }
-
-protected:
- static constexpr u32 BitsPerWord = 8 * sizeof(Word);
-
- static_assert(N % BitsPerWord == 0, "N must be a multiple of the number of bits per word");
- std::array<Word, N / BitsPerWord> mStorage{};
-};
-
-template <int N>
-inline typename BitSet<N>::Word& BitSet<N>::getWord(int bit) {
- return mStorage[bit / BitsPerWord];
-}
-
-template <int N>
-inline const typename BitSet<N>::Word& BitSet<N>::getWord(int bit) const {
- return mStorage[bit / BitsPerWord];
-}
-
-template <int N>
-inline void BitSet<N>::setBit(int bit) {
- getWord(bit) |= makeMask(bit);
-}
-
-template <int N>
-inline void BitSet<N>::resetBit(int bit) {
- getWord(bit) &= ~makeMask(bit);
-}
-
-template <int N>
-inline void BitSet<N>::changeBit(int bit, bool on) {
- if (on)
- setBit(bit);
- else
- resetBit(bit);
-}
-
-template <int N>
-inline void BitSet<N>::toggleBit(int bit) {
- getWord(bit) ^= makeMask(bit);
-}
-
-template <int N>
-inline bool BitSet<N>::isOnBit(int bit) const {
- return (getWord(bit) & makeMask(bit)) != 0;
-}
-
-template <int N>
-inline bool BitSet<N>::isOffBit(int bit) const {
- return !isOnBit(bit);
-}
-
-template <int N>
-inline bool BitSet<N>::isZero() const {
- for (const Word word : mStorage) {
- if (word != 0)
- return false;
- }
- return true;
-}
-
-template <int N>
-inline int BitSet<N>::countOnBit() const {
- int count = 0;
- for (const Word word : mStorage) {
- count += sead::BitFlagUtil::countOnBit(word);
- }
- return count;
-}
-
-template <int N>
-inline int BitSet<N>::countRightOnBit(int bit) const {
- int count = 0;
- const auto last_word_index = u32(bit / BitsPerWord);
- for (u32 i = 0; i < last_word_index; ++i) {
- count += sead::BitFlagUtil::countOnBit(mStorage[i]);
- }
- count += sead::BitFlagUtil::countRightOnBit(mStorage[last_word_index], bit % BitsPerWord);
- return count;
-}
-
-} // namespace ksys::util