1#ifndef SEAD_BIT_FLAG_H_
2#define SEAD_BIT_FLAG_H_
4#include <basis/seadAssert.h>
5#include <basis/seadTypes.h>
16 return countOnBit((x & -x) - 1);
24 return countOnBit(
static_cast<u32>(x)) + countOnBit(
static_cast<u32>(x >> 32));
29 return countOnBit64((x & -x) - 1);
67 bool isOn(T mask)
const {
return (
mBits & mask) != 0; }
89 if (
sizeof(T) <=
sizeof(u32))
90 return BitFlagUtil::countOnBit(
mBits);
92 return BitFlagUtil::countOnBit64(
mBits);
97 if (
sizeof(T) <=
sizeof(u32))
98 return BitFlagUtil::countContinuousOffBitFromRight(
mBits);
100 return BitFlagUtil::countContinuousOffBitFromRight64(
mBits);
105 if (
sizeof(T) <=
sizeof(u32))
106 return BitFlagUtil::countRightOnBit(
mBits, bit);
108 return BitFlagUtil::countRightOnBit64(
mBits, bit);
113 if (
sizeof(T) <=
sizeof(u32))
114 return BitFlagUtil::findOnBitFromRight(
mBits, num);
116 return BitFlagUtil::findOnBitFromRight64(
mBits, num);
128static_assert(
sizeof(
BitFlag8) == 1,
"sead::BitFlag8 size mismatch");
129static_assert(
sizeof(
BitFlag16) == 2,
"sead::BitFlag16 size mismatch");
130static_assert(
sizeof(
BitFlag32) == 4,
"sead::BitFlag32 size mismatch");
Definition seadBitFlag.h:10
static s32 countContinuousOffBitFromRight64(u64 x)
Definition seadBitFlag.h:27
static s32 countContinuousOffBitFromRight(u32 x)
Definition seadBitFlag.h:14
static s32 countRightOnBit(u32 x, s32 bit)
static s32 findOnBitFromRight64(u64 x, s32 num)
static s32 countRightOnBit64(u64 x, s32 bit)
static s32 countOnBit64(u64 x)
Definition seadBitFlag.h:22
static s32 findOnBitFromRight(u32 x, s32 num)
static s32 countOnBit(u32 x)
Definition seadBitFlag.h:38
T getMask(T mask) const
Definition seadBitFlag.h:71
T * getPtr()
Definition seadBitFlag.h:57
void makeAllZero()
Definition seadBitFlag.h:52
s32 countContinuousOffBitFromRight() const
Definition seadBitFlag.h:95
operator T() const
Definition seadBitFlag.h:50
T mBits
Definition seadBitFlag.h:120
bool isOff(T mask) const
Definition seadBitFlag.h:69
BitFlag()
Definition seadBitFlag.h:40
void toggle(T mask)
Definition seadBitFlag.h:63
s32 countOnBit() const
Definition seadBitFlag.h:87
bool isOffBit(s32 bit) const
Definition seadBitFlag.h:85
void set(T mask)
Definition seadBitFlag.h:61
s32 findOnBitFromRight(s32 num) const
Definition seadBitFlag.h:111
void setDirect(T bits)
Definition seadBitFlag.h:55
void setBit(s32 bit)
Definition seadBitFlag.h:79
const T * getPtr() const
Definition seadBitFlag.h:58
size_t getByteSize() const
Definition seadBitFlag.h:59
T getDirect() const
Definition seadBitFlag.h:56
bool isOn(T mask) const
Definition seadBitFlag.h:67
void changeBit(s32 bit, bool b)
Definition seadBitFlag.h:81
BitFlag(T t)
Definition seadBitFlag.h:45
void change(T mask, bool b)
Definition seadBitFlag.h:64
bool isOnAll(T mask) const
Definition seadBitFlag.h:68
bool isZero() const
Definition seadBitFlag.h:66
void toggleBit(s32 bit)
Definition seadBitFlag.h:82
static T makeMask(s32 bit)
Definition seadBitFlag.h:73
s32 countRightOnBit(s32 bit) const
Definition seadBitFlag.h:103
void makeAllOne()
Definition seadBitFlag.h:53
void reset(T mask)
Definition seadBitFlag.h:62
void resetBit(s32 bit)
Definition seadBitFlag.h:80
bool isOnBit(s32 bit) const
Definition seadBitFlag.h:84
Definition seadAssert.h:44
BitFlag< u16 > BitFlag16
Definition seadBitFlag.h:124
BitFlag< u32 > BitFlag32
Definition seadBitFlag.h:125
BitFlag< u8 > BitFlag8
Definition seadBitFlag.h:123
#define SEAD_ASSERT(condition)
Definition seadAssert.h:24