acme
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Pages Concepts
aaa_bit.h
1#pragma once
2
3
4//namespace logic
5//{
6//
7
8 class CLASS_DECL_ACME boolean
9 {
10 public:
11
12
13 enum_boolean m_eboolean;
14
15
16 inline boolean(enum_optional) { m_eboolean = e_boolean_none; }
17
18
19 inline boolean() { m_eboolean = e_boolean_none; }
20
21
22 inline boolean(int i) { operator=(i); }
23
24
25 inline boolean(bool b) { operator=(b); }
26
27
28 inline boolean(const boolean & boolean) : m_eboolean(e_boolean_none) { if (!boolean.undefined()) { m_eboolean = boolean.m_eboolean; } }
29
30
31 inline bool isFalse() const { return is_false(); }
32
33
34 inline bool is_false() const { return m_eboolean < e_boolean_false; }
35
36
37 inline bool undefined() const { return is_empty(); }
38
39
40 inline bool is_empty() const { return m_eboolean == e_boolean_empty; }
41
42 inline bool is_set() const { return m_eboolean != e_boolean_empty; }
43
44 inline bool notTrue() const { return m_eboolean < e_boolean_yes; }
45
46
47 inline bool is_none() const { return is_empty(); }
48
49
50 inline bool is_true() const { return m_eboolean > e_boolean_empty; }
51
52
53 inline bool is_true(bool bDefault) const { return m_eboolean ? isTrue() : bDefault; }
54
55
56 inline bool isTrue() const { return is_true(); }
57
58
59 inline bool is_optional() const { return !m_eboolean; }
60
61
62 inline bool isOptional() const { return is_optional(); }
63
64
65 inline operator bool() const { return isTrue(); }
66
67
68 inline bool operator!() const { return isFalse(); }
69
70
71 inline bool operator<(int i) const { return (int)m_eboolean < i; }
72
73
74 inline bool operator<=(int i) const { return (int)m_eboolean <= i; }
75
76
77 inline bool operator>(int i) const { return (int)m_eboolean > i; }
78
79
80 inline bool operator>=(int i) const { return (int)m_eboolean >= i; }
81
82
83 inline bool operator==(int i) const { return (int)m_eboolean == i; }
84
85
86 inline bool operator!=(int i) const { return !operator==(i); }
87
88
89 inline boolean & operator=(int i)
90 {
91 m_eboolean = (i ? e_boolean_true : e_boolean_false);
92 return *this;
93 }
94
95
96 inline boolean & operator=(bool b)
97 {
98 m_eboolean = (b ? e_boolean_true : e_boolean_false);
99 return *this;
100 }
101
102
103 inline bool operator==(bool b) const { return (m_eboolean == e_boolean_true && b) || (m_eboolean == e_boolean_false && !b); }
104
105
106 inline bool operator!=(bool b) const { return !operator==(b); }
107
108
109 inline boolean & operator=(const boolean & boolean)
110 {
111 if (this != &boolean && !boolean.undefined()) { m_eboolean = boolean.m_eboolean; };
112 return *this;
113 }
114
115
116 inline void defer(int i) { if (is_empty()) { operator=(i); } }
117
118
119 inline boolean deferred(int i) const { if (is_empty()) { return i; } else { return m_eboolean; } }
120
121
122 inline boolean operator()(int i) const { return deferred(i); }
123
124 };
125
126
127//} // namespace logic
128
129
130
131inline bool __is_true(bool b) { return b; }
132
133
134inline bool __is_true(const enum_boolean & boolean) { return boolean > 0; }
135
136
137inline bool __is_false(bool b) { return !b; }
138
139
140inline bool __is_false(const enum_boolean & ebit) { return ebit < 0; }
141
142
143inline bool __is_optional(bool b) { return false; }
144
145
146inline bool __is_optional(const ::logic::boolean & boolean) { return boolean.isOptional(); }
147
148
149#define __optional_is_true(flag, option) ((bool)(flag) || (__is_optional(flag) && (option)))