| 24 | |
| 25 | |
| 26 | void cRawBitArray::Resize(const int old_bits, const int new_bits) |
| 27 | { |
| 28 | const int num_old_fields = GetNumFields(old_bits); |
| 29 | const int num_new_fields = GetNumFields(new_bits); |
| 30 | if (num_old_fields == num_new_fields) { |
| 31 | // Clear all bits past the new end and stop. |
| 32 | unsigned int & last_field = bit_fields[num_new_fields - 1]; |
| 33 | for (int i = new_bits; i < old_bits; i++) { |
| 34 | const unsigned int clear_bit = i & 31; |
| 35 | last_field &= ~(1 << clear_bit); |
| 36 | } |
| 37 | return; |
| 38 | } |
| 39 | |
| 40 | // If we made it this far, we have to change the number of fields. |
| 41 | // Create the new bit array and copy the old one into it. |
| 42 | unsigned int * new_bit_fields = new unsigned int[ num_new_fields ]; |
| 43 | for (int i = 0; i < num_new_fields && i < num_old_fields; i++) { |
| 44 | new_bit_fields[i] = bit_fields[i]; |
| 45 | } |
| 46 | |
| 47 | // If the old bits are longer, we need to clear the end of the last |
| 48 | // bit field. |
| 49 | if (num_old_fields > num_new_fields) { |
| 50 | unsigned int & last_field = new_bit_fields[num_new_fields - 1]; |
| 51 | for (int clear_bit=GetFieldPos(new_bits); clear_bit < 32; clear_bit++) { |
| 52 | last_field &= ~(1 << clear_bit); |
| 53 | } |
| 54 | } |
| 55 | |
| 56 | // If the new bits are longer, clear everything past the end of the old |
| 57 | // bits. |
| 58 | for (int i = num_old_fields; i < num_new_fields; i++) { |
| 59 | new_bit_fields[i] = 0; |
| 60 | } |
| 61 | |
| 62 | if (bit_fields != NULL) { |
| 63 | delete [] bit_fields; |
| 64 | } |
| 65 | bit_fields = new_bit_fields; |
| 66 | } |
| 67 | |
| 68 | |
| 69 | void cRawBitArray::ResizeSloppy(const int new_bits) |
no outgoing calls
no test coverage detected