MCPcopy Create free account
hub / github.com/devosoft/avida / Resize

Method Resize

avida-core/source/tools/cBitArray.cc:26–66  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

24
25
26void 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
69void cRawBitArray::ResizeSloppy(const int new_bits)

Callers 12

CreateAllMethod · 0.45
SetWeightMethod · 0.45
AddEntryMethod · 0.45
LoadMethod · 0.45
SetIntMethod · 0.45
SetDoubleMethod · 0.45
SetStringMethod · 0.45
mainFunction · 0.45
postProcessMethod · 0.45
AppendMethod · 0.45
RunTestsMethod · 0.45
SetupSymbolMapsMethod · 0.45

Calls

no outgoing calls

Tested by

no test coverage detected