Files
ss/include/egg/prim/eggBitFlag.h
T
Elijah Thomas 26af4db82d update from dtk-template - clangd :) (#66)
* update from dtk-template and start work towards using clangd

* include <a> -> "a"

* Update build.yml

* remove/add non-trivial class in union warning
2024-10-16 15:36:02 -04:00

68 lines
1.2 KiB
C++

#ifndef EGG_BIT_FLAG_H
#define EGG_BIT_FLAG_H
// Pulled from ogws
#include "common.h"
namespace EGG {
template <typename T>
class TBitFlag {
public:
T value;
void makeAllZero() {
value = T();
}
TBitFlag() {}
TBitFlag(T value) : value(value) {}
T makeMask(u8 bit) const {
return 1 << bit;
}
bool on(T mask) const {
return (value & mask);
}
bool off(T mask) const {
return !(value & mask);
}
void set(T mask) {
value |= mask;
}
void reset(T mask) {
value &= ~mask;
}
bool onBit(u8 bit) const {
return on(makeMask(bit));
}
bool offBit(u8 bit) const {
return off(makeMask(bit));
}
void setBit(u8 bit) {
set(makeMask(bit));
}
void resetBit(u8 bit) {
reset(makeMask(bit));
}
void toggleBit(u8 bit) {
if (!onBit(bit)) {
setBit(bit);
} else {
resetBit(bit);
}
}
void changeBit(u8 bit, bool b) {
if (b) {
setBit(bit);
} else {
resetBit(bit);
}
}
T getDirect() const {
return value;
}
};
} // namespace EGG
#endif