2
3
4
5
6
10#include "../types/evmu_typedefs.h"
12#define EVMU_LOGIC_HIGH 1
13#define EVMU_LOGIC_LOW 0
15#define EVMU_WAVE_LOGIC_BITS 2
16#define EVMU_WAVE_LOGIC_CURRENT_MASK (0x3
)
19#define GBL_SELF_TYPE GblEnum
24GBL_DECLARE_ENUM(EVMU_LOGIC) {
29 EVMU_LOGIC_COUNT = EVMU_LOGIC_X + 1
32#define EVMU_DECLARE_SUBWAVE_ENUMS_(L)
38GBL_DECLARE_ENUM(EvmuWave) {
46EVMU_INLINE void EvmuWave_reset (GBL_SELF) GBL_NOEXCEPT;
47EVMU_INLINE void EvmuWave_fill (GBL_SELF, EVMU_LOGIC values) GBL_NOEXCEPT;
48EVMU_INLINE void EvmuWave_set (GBL_SELF, EVMU_LOGIC prevValue, EVMU_LOGIC curValue) GBL_NOEXCEPT;
49EVMU_INLINE void EvmuWave_update (GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT;
51EVMU_INLINE EVMU_LOGIC EvmuWave_logicCurrent (GBL_CSELF) GBL_NOEXCEPT;
52EVMU_INLINE GblBool EvmuWave_isLogic (GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT;
53EVMU_INLINE GblBool EvmuWave_isLogicHigh (GBL_CSELF) GBL_NOEXCEPT;
54EVMU_INLINE GblBool EvmuWave_isLogicLow (GBL_CSELF) GBL_NOEXCEPT;
55EVMU_INLINE GblBool EvmuWave_isLogicInactive (GBL_CSELF) GBL_NOEXCEPT;
56EVMU_INLINE GblBool EvmuWave_isLogicUnknown (GBL_CSELF) GBL_NOEXCEPT;
57EVMU_INLINE GblBool EvmuWave_isLogicActive (GBL_CSELF) GBL_NOEXCEPT;
58EVMU_INLINE GblBool EvmuWave_isLogicKnown (GBL_CSELF) GBL_NOEXCEPT;
59EVMU_INLINE GblBool EvmuWave_isLogicValid (GBL_CSELF) GBL_NOEXCEPT;
60EVMU_INLINE GblBool EvmuWave_isLogicInvalid (GBL_CSELF) GBL_NOEXCEPT;
62EVMU_INLINE EVMU_LOGIC EvmuWave_logicPrevious (GBL_CSELF) GBL_NOEXCEPT;
63EVMU_INLINE GblBool EvmuWave_wasLogic (GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT;
64EVMU_INLINE GblBool EvmuWave_wasLogicHigh (GBL_CSELF) GBL_NOEXCEPT;
65EVMU_INLINE GblBool EvmuWave_wasLogicLow (GBL_CSELF) GBL_NOEXCEPT;
66EVMU_INLINE GblBool EvmuWave_wasLogicInactive (GBL_CSELF) GBL_NOEXCEPT;
67EVMU_INLINE GblBool EvmuWave_wasLogicUnknown (GBL_CSELF) GBL_NOEXCEPT;
68EVMU_INLINE GblBool EvmuWave_wasLogicActive (GBL_CSELF) GBL_NOEXCEPT;
69EVMU_INLINE GblBool EvmuWave_wasLogicKnown (GBL_CSELF) GBL_NOEXCEPT;
70EVMU_INLINE GblBool EvmuWave_wasLogicValid (GBL_CSELF) GBL_NOEXCEPT;
71EVMU_INLINE GblBool EvmuWave_wasLogicInvalid (GBL_CSELF) GBL_NOEXCEPT;
73EVMU_INLINE GblBool EvmuWave_hasStayed (GBL_CSELF) GBL_NOEXCEPT;
74EVMU_INLINE GblBool EvmuWave_hasStayedLogic (GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT;
75EVMU_INLINE GblBool EvmuWave_hasStayedLow (GBL_CSELF) GBL_NOEXCEPT;
76EVMU_INLINE GblBool EvmuWave_hasStayedHigh (GBL_CSELF) GBL_NOEXCEPT;
77EVMU_INLINE GblBool EvmuWave_hasStayedInactive (GBL_CSELF) GBL_NOEXCEPT;
78EVMU_INLINE GblBool EvmuWave_hasStayedUnknown (GBL_CSELF) GBL_NOEXCEPT;
79EVMU_INLINE GblBool EvmuWave_hasStayedActive (GBL_CSELF) GBL_NOEXCEPT;
80EVMU_INLINE GblBool EvmuWave_hasStayedKnown (GBL_CSELF) GBL_NOEXCEPT;
81EVMU_INLINE GblBool EvmuWave_hasStayedValid (GBL_CSELF) GBL_NOEXCEPT;
82EVMU_INLINE GblBool EvmuWave_hasStayedInvalid (GBL_CSELF) GBL_NOEXCEPT;
84EVMU_INLINE GblBool EvmuWave_hasChanged (GBL_CSELF) GBL_NOEXCEPT;
85EVMU_INLINE GblBool EvmuWave_hasChangedLogic (GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT;
86EVMU_INLINE GblBool EvmuWave_hasChangedEdge (GBL_CSELF) GBL_NOEXCEPT;
87EVMU_INLINE GblBool EvmuWave_hasChangedEdgeRising (GBL_CSELF) GBL_NOEXCEPT;
88EVMU_INLINE GblBool EvmuWave_hasChangedEdgeFalling (GBL_CSELF) GBL_NOEXCEPT;
89EVMU_INLINE GblBool EvmuWave_hasChangedActive (GBL_CSELF) GBL_NOEXCEPT;
90EVMU_INLINE GblBool EvmuWave_hasChangedInactive (GBL_CSELF) GBL_NOEXCEPT;
91EVMU_INLINE GblBool EvmuWave_hasChangedKnown (GBL_CSELF) GBL_NOEXCEPT;
92EVMU_INLINE GblBool EvmuWave_hasChangedUnknown (GBL_CSELF) GBL_NOEXCEPT;
93EVMU_INLINE GblBool EvmuWave_hasChangedValid (GBL_CSELF) GBL_NOEXCEPT;
94EVMU_INLINE GblBool EvmuWave_hasChangedInvalid (GBL_CSELF) GBL_NOEXCEPT;
101EVMU_INLINE void EvmuWave_logicPreviousSet_(GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT {
105EVMU_INLINE void EvmuWave_logicCurrentSet_(GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT {
109EVMU_INLINE void EvmuWave_reset(GBL_SELF) GBL_NOEXCEPT {
110 *pSelf = EVMU_WAVE_X_X;
112EVMU_INLINE void EvmuWave_fill(GBL_SELF, EVMU_LOGIC values) GBL_NOEXCEPT {
113 EvmuWave_set(pSelf, values, values);
115EVMU_INLINE void EvmuWave_set(GBL_SELF, EVMU_LOGIC prevValue, EVMU_LOGIC curValue) GBL_NOEXCEPT {
116 EvmuWave_logicPreviousSet_(pSelf, prevValue);
117 EvmuWave_logicCurrentSet_(pSelf, curValue);
119EVMU_INLINE EVMU_LOGIC EvmuWave_logicCurrent(GBL_CSELF) GBL_NOEXCEPT {
122EVMU_INLINE EVMU_LOGIC EvmuWave_logicPrevious(GBL_CSELF) GBL_NOEXCEPT {
125EVMU_INLINE void EvmuWave_update(GBL_SELF, EVMU_LOGIC value) GBL_NOEXCEPT {
126 EvmuWave_logicPreviousSet_(pSelf, EvmuWave_logicCurrent(pSelf));
127 EvmuWave_logicCurrentSet_(pSelf, value);
129EVMU_INLINE GblBool EvmuWave_hasStayed(GBL_CSELF) GBL_NOEXCEPT {
130 return EvmuWave_logicCurrent(pSelf) == EvmuWave_logicPrevious(pSelf);
132EVMU_INLINE GblBool EvmuWave_hasStayedLogic(GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT {
133 return EvmuWave_isLogic(pSelf, value) && EvmuWave_wasLogic(pSelf, value);
135EVMU_INLINE GblBool EvmuWave_hasStayedLow(GBL_CSELF) GBL_NOEXCEPT {
136 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_0);
138EVMU_INLINE GblBool EvmuWave_hasStayedHigh(GBL_CSELF) GBL_NOEXCEPT {
139 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_1);
141EVMU_INLINE GblBool EvmuWave_hasStayedInactive(GBL_CSELF) GBL_NOEXCEPT {
142 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_Z);
144EVMU_INLINE GblBool EvmuWave_hasStayedUnknown(GBL_CSELF) GBL_NOEXCEPT {
145 return EvmuWave_hasStayedLogic(pSelf, EVMU_LOGIC_X);
147EVMU_INLINE GblBool EvmuWave_hasStayedActive(GBL_CSELF) GBL_NOEXCEPT {
148 return EvmuWave_wasLogicActive(pSelf) && EvmuWave_isLogicActive(pSelf);
150EVMU_INLINE GblBool EvmuWave_hasStayedKnown(GBL_CSELF) GBL_NOEXCEPT {
151 return EvmuWave_wasLogicKnown(pSelf) && EvmuWave_isLogicKnown(pSelf);
153EVMU_INLINE GblBool EvmuWave_hasStayedValid(GBL_CSELF) GBL_NOEXCEPT {
154 return EvmuWave_wasLogicValid(pSelf) && EvmuWave_isLogicValid(pSelf);
156EVMU_INLINE GblBool EvmuWave_hasStayedInvalid(GBL_CSELF) GBL_NOEXCEPT {
157 return EvmuWave_wasLogicInvalid(pSelf) && EvmuWave_isLogicInvalid(pSelf);
159EVMU_INLINE GblBool EvmuWave_hasChanged(GBL_CSELF) GBL_NOEXCEPT {
160 return !EvmuWave_hasStayed(pSelf);
162EVMU_INLINE GblBool EvmuWave_hasChangedLogic(GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT {
163 return !EvmuWave_wasLogic(pSelf, value) && EvmuWave_isLogic(pSelf, value);
165EVMU_INLINE GblBool EvmuWave_hasChangedEdge(GBL_CSELF) GBL_NOEXCEPT {
166 return EvmuWave_hasChangedEdgeRising(pSelf) || EvmuWave_hasChangedEdgeFalling(pSelf);
168EVMU_INLINE GblBool EvmuWave_hasChangedEdgeRising(GBL_CSELF) GBL_NOEXCEPT {
169 return EvmuWave_wasLogicLow(pSelf) && EvmuWave_isLogicHigh(pSelf);
171EVMU_INLINE GblBool EvmuWave_hasChangedEdgeFalling(GBL_CSELF) GBL_NOEXCEPT {
172 return EvmuWave_wasLogicHigh(pSelf) && EvmuWave_isLogicLow(pSelf);
174EVMU_INLINE GblBool EvmuWave_hasChangedActive(GBL_CSELF) GBL_NOEXCEPT {
175 return EvmuWave_wasLogicInactive(pSelf) && EvmuWave_isLogicActive(pSelf);
177EVMU_INLINE GblBool EvmuWave_hasChangedInactive(GBL_CSELF) GBL_NOEXCEPT {
178 return EvmuWave_wasLogicActive(pSelf) && EvmuWave_isLogicInactive(pSelf);
180EVMU_INLINE GblBool EvmuWave_hasChangedKnown(GBL_CSELF) GBL_NOEXCEPT {
181 return EvmuWave_wasLogicUnknown(pSelf) && EvmuWave_isLogicKnown(pSelf);
183EVMU_INLINE GblBool EvmuWave_hasChangedUnknown(GBL_CSELF) GBL_NOEXCEPT {
184 return EvmuWave_wasLogicKnown(pSelf) && EvmuWave_isLogicUnknown(pSelf);
186EVMU_INLINE GblBool EvmuWave_hasChangedValid(GBL_CSELF) GBL_NOEXCEPT {
187 return EvmuWave_wasLogicInvalid(pSelf) && EvmuWave_isLogicValid(pSelf);
189EVMU_INLINE GblBool EvmuWave_hasChangedInvalid(GBL_CSELF) GBL_NOEXCEPT {
190 return EvmuWave_wasLogicValid(pSelf) && EvmuWave_isLogicInvalid(pSelf);
192EVMU_INLINE GblBool EvmuWave_isLogic(GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT {
193 return EvmuWave_logicCurrent(pSelf) == value;
195EVMU_INLINE GblBool EvmuWave_isLogicHigh(GBL_CSELF) GBL_NOEXCEPT {
196 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_1);
198EVMU_INLINE GblBool EvmuWave_isLogicLow(GBL_CSELF) GBL_NOEXCEPT {
199 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_0);
201EVMU_INLINE GblBool EvmuWave_isLogicInactive(GBL_CSELF) GBL_NOEXCEPT {
202 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_Z);
204EVMU_INLINE GblBool EvmuWave_isLogicUnknown(GBL_CSELF) GBL_NOEXCEPT {
205 return EvmuWave_isLogic(pSelf, EVMU_LOGIC_X);
207EVMU_INLINE GblBool EvmuWave_isLogicActive(GBL_CSELF) GBL_NOEXCEPT {
208 return !EvmuWave_isLogicInactive(pSelf);
210EVMU_INLINE GblBool EvmuWave_isLogicKnown(GBL_CSELF) GBL_NOEXCEPT {
211 return !EvmuWave_isLogicUnknown(pSelf);
213EVMU_INLINE GblBool EvmuWave_isLogicValid(GBL_CSELF) GBL_NOEXCEPT {
214 return EvmuWave_isLogicActive(pSelf) && EvmuWave_isLogicKnown(pSelf);
216EVMU_INLINE GblBool EvmuWave_isLogicInvalid(GBL_CSELF) GBL_NOEXCEPT {
217 return EvmuWave_isLogicInactive(pSelf) || EvmuWave_isLogicUnknown(pSelf);
219EVMU_INLINE GblBool EvmuWave_wasLogic(GBL_CSELF, EVMU_LOGIC value) GBL_NOEXCEPT {
220 return EvmuWave_logicPrevious(pSelf) == value;
222EVMU_INLINE GblBool EvmuWave_wasLogicHigh(GBL_CSELF) GBL_NOEXCEPT {
223 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_1);
225EVMU_INLINE GblBool EvmuWave_wasLogicLow(GBL_CSELF) GBL_NOEXCEPT {
226 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_0);
228EVMU_INLINE GblBool EvmuWave_wasLogicInactive(GBL_CSELF) GBL_NOEXCEPT {
229 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_Z);
231EVMU_INLINE GblBool EvmuWave_wasLogicUnknown(GBL_CSELF) GBL_NOEXCEPT {
232 return EvmuWave_wasLogic(pSelf, EVMU_LOGIC_X);
234EVMU_INLINE GblBool EvmuWave_wasLogicActive(GBL_CSELF) GBL_NOEXCEPT {
235 return !EvmuWave_wasLogicInactive(pSelf);
237EVMU_INLINE GblBool EvmuWave_wasLogicKnown(GBL_CSELF) GBL_NOEXCEPT {
238 return !EvmuWave_wasLogicUnknown(pSelf);
240EVMU_INLINE GblBool EvmuWave_wasLogicValid(GBL_CSELF) GBL_NOEXCEPT {
241 return EvmuWave_wasLogicActive(pSelf) && EvmuWave_wasLogicKnown(pSelf);
243EVMU_INLINE GblBool EvmuWave_wasLogicInvalid(GBL_CSELF) GBL_NOEXCEPT {
244 return EvmuWave_wasLogicInactive(pSelf) || EvmuWave_wasLogicUnknown(pSelf);
247#undef EVMU_WAVE_LOGIC_MASK_
#define EVMU_INLINE
Define used for inlining a funcion within a C header file.
#define EVMU_WAVE_LOGIC_PREVIOUS_MASK
#define EVMU_DECLARE_SUBWAVE_ENUMS_(L)
#define EVMU_WAVE_LOGIC_BITS
#define EVMU_WAVE_LOGIC_CURRENT_MASK