31 #ifndef CPL_MASK_H_INCLUDED
32 #define CPL_MASK_H_INCLUDED
48 GUInt32* CPLMaskCreate(std::size_t size,
bool default_value) {
49 std::size_t nBytes = (size + 31) / 8;
55 default_value ? 0xff : 0,
57 return static_cast<GUInt32*
>(buf);
68 bool CPLMaskGet(
GUInt32* mask, std::size_t i) {
69 return mask[i >> 5] & (0x01 << (i & 0x1f));
79 void CPLMaskClear(
GUInt32* mask, std::size_t i) {
80 mask[i >> 5] &= ~(0x01 << (i & 0x1f));
90 void CPLMaskClearAll(
GUInt32* mask, std::size_t size) {
91 auto nBytes = (size + 31) / 8;
92 std::memset(mask, 0, nBytes);
102 void CPLMaskSet(
GUInt32* mask, std::size_t i) {
103 mask[i >> 5] |= (0x01 << (i & 0x1f));
113 void CPLMaskSetAll(
GUInt32* mask, std::size_t size) {
114 auto nBytes = (size + 31) / 8;
115 std::memset(mask, 0xff, nBytes);
126 void CPLMaskMerge(
GUInt32* mask1,
GUInt32* mask2, std::size_t n) {
127 std::size_t nBytes = (n + 31) / 8;
128 std::size_t nIter = nBytes / 4;
129 for (std::size_t i = 0; i < nIter; i++) {
130 mask1[i] |= mask2[i];
134 #endif // __cplusplus