NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
eggBitFlag.h
1#pragma once
2
3#include <types.h>
4
5namespace EGG {
6
7template <typename T>
8class TBitFlag {
9public:
10 TBitFlag() { makeAllZero(); }
11
12 TBitFlag(T value)
13 : mValue(value) {}
14
15 operator T() const { return mValue; }
16
17 void makeAllZero() { mValue = static_cast<T>(0); }
18 bool isZero() const { return mValue == 0; }
19
20 T getDirect() const { return mValue; }
21 void setDirect(T value) { mValue = value; }
22
23 /******************************************************************************
24 * Bit mask operations
25 ******************************************************************************/
26
27 void set(T mask) { mValue |= mask; }
28 void reset(T mask) { mValue &= ~mask; }
29 void change(T mask, bool on) { on ? set(mask) : reset(mask); }
30 bool on(T mask) const { return mValue & mask; }
31 bool off(T mask) const { return !on(mask); }
32
33 /******************************************************************************
34 * Bit index operations
35 ******************************************************************************/
36 void setBit(u8 bit) { set(makeMask(bit)); }
37 void resetBit(u8 bit) { reset(makeMask(bit)); }
38
39 void changeBit(u8 bit, bool on) { change(makeMask(bit), on); }
40 void toggleBit(u8 bit) { changeBit(bit, !onBit(bit)); }
41
42 bool onBit(u8 bit) const { return on(makeMask(bit)); }
43 bool offBit(u8 bit) const { return off(makeMask(bit)); }
44
45private:
46 T makeMask(u8 bit) const { return 1 << bit; }
47
48 T mValue;
49};
50
51} // namespace EGG