acme
Foundational cross-platform layer of the ca2 framework
Loading...
Searching...
No Matches
set_bit.h
1// Created by camilo on 2021-09-06 14:41 BRT <3ThomasBS_!!
2#pragma once
3
4
5template < typename ENUM >
6class set_bit
7{
8public:
9
10
11 using TYPE = raw_enum_of<ENUM>;
12
13
14 TYPE & m_field;
15 ::u64 m_mask;
16
17
18 set_bit(TYPE & field, ::u64 mask) :
19 m_field(field), m_mask(mask) { }
20
21 bool is_set() const { return ((::u64)m_field & m_mask) == m_mask; }
22
23 void set(bool bSet)
24 {
25
26 if (bSet)
27 {
28
29 set();
30
31 }
32 else
33 {
34
35 unset();
36
37 }
38
39 }
40
41 void set()
42 {
43
44 if (is_set())
45 {
46
47 return;
48
49 }
50
51 m_field = (TYPE) (((::u64) m_field) | ((::u64)m_mask));
52
53 }
54
55 void unset()
56 {
57
58 if (is_set())
59 {
60
61 return;
62
63 }
64
65 m_field = (TYPE) (((::u64)m_field) & (~((::u64)m_mask)));
66
67 }
68
69};
70
71
72