| 53 | } |
| 54 | |
| 55 | static void mi_commit_mask_create(size_t bitidx, size_t bitcount, mi_commit_mask_t* cm) { |
| 56 | mi_assert_internal(bitidx < MI_COMMIT_MASK_BITS); |
| 57 | mi_assert_internal((bitidx + bitcount) <= MI_COMMIT_MASK_BITS); |
| 58 | if (bitcount == MI_COMMIT_MASK_BITS) { |
| 59 | mi_assert_internal(bitidx==0); |
| 60 | mi_commit_mask_create_full(cm); |
| 61 | } |
| 62 | else if (bitcount == 0) { |
| 63 | mi_commit_mask_create_empty(cm); |
| 64 | } |
| 65 | else { |
| 66 | mi_commit_mask_create_empty(cm); |
| 67 | size_t i = bitidx / MI_COMMIT_MASK_FIELD_BITS; |
| 68 | size_t ofs = bitidx % MI_COMMIT_MASK_FIELD_BITS; |
| 69 | while (bitcount > 0) { |
| 70 | mi_assert_internal(i < MI_COMMIT_MASK_FIELD_COUNT); |
| 71 | size_t avail = MI_COMMIT_MASK_FIELD_BITS - ofs; |
| 72 | size_t count = (bitcount > avail ? avail : bitcount); |
| 73 | size_t mask = (count >= MI_COMMIT_MASK_FIELD_BITS ? ~((size_t)0) : (((size_t)1 << count) - 1) << ofs); |
| 74 | cm->mask[i] = mask; |
| 75 | bitcount -= count; |
| 76 | ofs = 0; |
| 77 | i++; |
| 78 | } |
| 79 | } |
| 80 | } |
| 81 | |
| 82 | size_t _mi_commit_mask_committed_size(const mi_commit_mask_t* cm, size_t total) { |
| 83 | mi_assert_internal((total%MI_COMMIT_MASK_BITS)==0); |
no test coverage detected