| 551 | inline void ImBitArrayClearBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] &= ~mask; } |
| 552 | inline void ImBitArraySetBit(ImU32* arr, int n) { ImU32 mask = (ImU32)1 << (n & 31); arr[n >> 5] |= mask; } |
| 553 | inline void ImBitArraySetBitRange(ImU32* arr, int n, int n2) // Works on range [n..n2) |
| 554 | { |
| 555 | n2--; |
| 556 | while (n <= n2) |
| 557 | { |
| 558 | int a_mod = (n & 31); |
| 559 | int b_mod = (n2 > (n | 31) ? 31 : (n2 & 31)) + 1; |
| 560 | ImU32 mask = (ImU32)(((ImU64)1 << b_mod) - 1) & ~(ImU32)(((ImU64)1 << a_mod) - 1); |
| 561 | arr[n >> 5] |= mask; |
| 562 | n = (n + 32) & ~31; |
| 563 | } |
| 564 | } |
| 565 | |
| 566 | // Helper: ImBitArray class (wrapper over ImBitArray functions) |
| 567 | // Store 1-bit per value. |