51 return (
UINT64 *)BitMask->Bits + (BitPos / 64);
110 if (BitPos > BitMask->Length)
112 ERROR(
"[ERROR] Trying to set bit %u which is outside of the bitmask (%zu length)\n",
113 BitPos, BitMask->Length);
119 *bitBase |= (1ull << BitPos);
137 if (BitPos > BitMask->Length)
139 ERROR(
"[ERROR] Trying to set bit %u which is outside of the bitmask (%zu length)\n",
140 BitPos, BitMask->Length);
146 *bitBase &= ~(1ull << BitPos);
166 if (BitPos > BitMask->Length)
168 ERROR(
"[ERROR] Trying to set bit %u which is outside of the bitmask (%zu length)\n",
169 BitPos, BitMask->Length);
175 return (*bitBase >> BitPos) & 1;
196 if (BitPos > BitMask->Length)
198 ERROR(
"[ERROR] Trying to set bit %u which is outside of the bitmask (%zu length)\n",
199 BitPos, BitMask->Length);
205 BYTE old = (*bitBase >> BitPos) & 1;
207 *bitBase |= (1ull << BitPos);
230 if (BitPos > BitMask->Length)
232 ERROR(
"[ERROR] Trying to set bit %u which is outside of the bitmask (%zu length)\n",
233 BitPos, BitMask->Length);
240 BYTE old = (*bitBase >> BitPos) & 1;
242 *bitBase &= ~(1ull << BitPos);
261 for (
DWORD i = 0; i < BitMask->Length; i += 64)
void BitMaskClear(BITMASK *BitMask, DWORD BitPos)
Clears a bit in a BITMASK.
DWORD BitMaskScanForward(BITMASK *BitMask)
Search for a set bit starting from the least significant bit.
BITMASK * BitMaskAlloc(size_t Size)
Creates a new BITMASK.
static uint8_t _BitScanForward64(uint32_t *Index, uint64_t Mask)
BYTE BitMaskTestAndReset(BITMASK *BitMask, DWORD BitPos)
Tests and clears a bit in a BITMASK.
#define HpAllocWithTag(Len, Tag)
void BitMaskFree(BITMASK **BitMask)
Frees a BITMASK allocated by BitMaskAlloc.
static UINT64 * BitMaskGetBase(BITMASK *BitMask, DWORD BitPos)
Returns the bit base for a given bit position.
size_t Length
The number of bits included.
static UINT64 * BitMaskGetBaseAndBit(BITMASK *BitMask, DWORD *BitPos)
Return the base and the position of a bit relative to that base.
#define HpFreeAndNullWithTag(Add, Tag)
unsigned long long UINT64
BYTE BitMaskTest(BITMASK *BitMask, DWORD BitPos)
Tests a bit in a BITMASK.
BYTE BitMaskTestAndSet(BITMASK *BitMask, DWORD BitPos)
Tests and sets a bit in a BITMASK.
void BitMaskSet(BITMASK *BitMask, DWORD BitPos)
Sets a bit in a BITMASK.