equal
deleted
inserted
replaced
130 BinaryMagnitudeSeq::~BinaryMagnitudeSeq() { |
130 BinaryMagnitudeSeq::~BinaryMagnitudeSeq() { |
131 FREE_C_HEAP_ARRAY(size_t, _mags); |
131 FREE_C_HEAP_ARRAY(size_t, _mags); |
132 } |
132 } |
133 |
133 |
134 void BinaryMagnitudeSeq::add(size_t val) { |
134 void BinaryMagnitudeSeq::add(size_t val) { |
135 Atomic::add(val, &_sum); |
135 Atomic::add(&_sum, val); |
136 |
136 |
137 int mag = log2_intptr(val) + 1; |
137 int mag = log2_intptr(val) + 1; |
138 |
138 |
139 // Defensively saturate for product bits: |
139 // Defensively saturate for product bits: |
140 if (mag < 0) { |
140 if (mag < 0) { |
145 if (mag >= BitsPerSize_t) { |
145 if (mag >= BitsPerSize_t) { |
146 assert (false, "bucket index (%d) overflow for value (" SIZE_FORMAT ")", mag, val); |
146 assert (false, "bucket index (%d) overflow for value (" SIZE_FORMAT ")", mag, val); |
147 mag = BitsPerSize_t - 1; |
147 mag = BitsPerSize_t - 1; |
148 } |
148 } |
149 |
149 |
150 Atomic::add((size_t)1, &_mags[mag]); |
150 Atomic::add(&_mags[mag], (size_t)1); |
151 } |
151 } |
152 |
152 |
153 size_t BinaryMagnitudeSeq::level(int level) const { |
153 size_t BinaryMagnitudeSeq::level(int level) const { |
154 if (0 <= level && level < BitsPerSize_t) { |
154 if (0 <= level && level < BitsPerSize_t) { |
155 return _mags[level]; |
155 return _mags[level]; |