| 565 | // Store 1-bit per value. |
| 566 | template<int BITCOUNT, int OFFSET = 0> |
| 567 | struct ImBitArray |
| 568 | { |
| 569 | ImU32 Storage[(BITCOUNT + 31) >> 5]; |
| 570 | ImBitArray() { ClearAllBits(); } |
| 571 | void ClearAllBits() { memset(Storage, 0, sizeof(Storage)); } |
| 572 | void SetAllBits() { memset(Storage, 255, sizeof(Storage)); } |
| 573 | bool TestBit(int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return IM_BITARRAY_TESTBIT(Storage, n); } |
| 574 | void SetBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArraySetBit(Storage, n); } |
| 575 | void ClearBit(int n) { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); ImBitArrayClearBit(Storage, n); } |
| 576 | void SetBitRange(int n, int n2) { n += OFFSET; n2 += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT && n2 > n && n2 <= BITCOUNT); ImBitArraySetBitRange(Storage, n, n2); } // Works on range [n..n2) |
| 577 | bool operator[](int n) const { n += OFFSET; IM_ASSERT(n >= 0 && n < BITCOUNT); return IM_BITARRAY_TESTBIT(Storage, n); } |
| 578 | }; |
| 579 | |
| 580 | // Helper: ImBitVector |
| 581 | // Store 1-bit per value. |
nothing calls this directly
no outgoing calls
no test coverage detected