summaryrefslogtreecommitdiff
path: root/include/egg/prim/eggBitFlag.h
blob: 3ea42beecbe30f19f92c86173691cad96511b924 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#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