ae2f::Core
Loading...
Searching...
No Matches
BitVec.h
Go to the documentation of this file.
1#if !defined(ae2f_Macro_BitVector_h)
2#define ae2f_Macro_BitVector_h
3
4#include "Cast.h"
5#include "Cmp.h"
6#include <stdint.h>
7
10typedef uint8_t ae2f_Macro_BitVecI_t;
11
15#define _ae2f_Macro_BitVec_Filled(len, vec_t) ae2f_static_cast(vec_t, (sizeof(vec_t) << 3) == (len) ? ae2f_static_cast(vec_t, -1) : (ae2f_static_cast(vec_t, ae2f_static_cast(vec_t, 1) << (len)) - 1))
16
19#define ae2f_Macro_BitVec_Filled(len) _ae2f_Macro_BitVec_Filled(len, size_t)
20
29#define _ae2f_Macro_BitVec_GetRanged(vector, start, end, vec_t) (((vector) >> (start)) & _ae2f_Macro_BitVec_Filled((end) - (start), vec_t))
30
38#define ae2f_Macro_BitVec_GetRanged(vector, start, end) _ae2f_Macro_BitVec_GetRanged(vector, ae2f_Macro_Cmp_TakeLs(start, end), ae2f_Macro_Cmp_TakeGt(start, end), size_t)
39
45#define ae2f_Macro_BitVec_Get(vector, idx) ae2f_Macro_BitVec_GetRanged(vector, idx, (idx) + 1)
46
56#define _ae2f_Macro_BitVec_SetRanged(vector, start, end, val, vec_t) ((vector) & (~((_ae2f_Macro_BitVec_Filled((end) - (start), vec_t)) << start)) | ((val) << start))
57
65#define ae2f_Macro_BitVec_SetRanged(vector, start, end, val) _ae2f_Macro_BitVec_SetRanged(vector, ae2f_Macro_Cmp_TakeLs(start, end), ae2f_Macro_Cmp_TakeGt(start, end), (val) & ae2f_Macro_BitVec_Filled(ae2f_Macro_Cmp_Diff(start, end)), size_t)
66
72#define ae2f_Macro_BitVec_Set(vector, idx, val) ae2f_Macro_BitVec_SetRanged(vector, idx, (idx) + 1, val)
73
74#endif // !defined(ae2f_Macro_BitVector_h)
uint8_t ae2f_Macro_BitVecI_t
The pre-defined index type for Bit vector.
Definition BitVec.h:10