219 void clear_range (idx_t beg, idx_t end);
220 void set_large_range (idx_t beg, idx_t end);
221 void clear_large_range (idx_t beg, idx_t end);
222 void at_put_range(idx_t beg, idx_t end, bool value);
223 void par_at_put_range(idx_t beg, idx_t end, bool value);
224 void at_put_large_range(idx_t beg, idx_t end, bool value);
225 void par_at_put_large_range(idx_t beg, idx_t end, bool value);
226
227 // Update a range of bits, using a hint about the size. Currently only
228 // inlines the predominant case of a 1-bit range. Works best when hint is a
229 // compile-time constant.
230 void set_range(idx_t beg, idx_t end, RangeSizeHint hint);
231 void clear_range(idx_t beg, idx_t end, RangeSizeHint hint);
232 void par_set_range(idx_t beg, idx_t end, RangeSizeHint hint);
233 void par_clear_range (idx_t beg, idx_t end, RangeSizeHint hint);
234
235 // Clearing
236 void clear_large();
237 inline void clear();
238
239 // Iteration support. Returns "true" if the iteration completed, false
240 // if the iteration terminated early (because the closure "blk" returned
241 // false).
242 bool iterate(BitMapClosure* blk, idx_t leftIndex, idx_t rightIndex);
243 bool iterate(BitMapClosure* blk) {
244 // call the version that takes an interval
245 return iterate(blk, 0, size());
246 }
247
248 // Looking for 1's and 0's at indices equal to or greater than "l_index",
249 // stopping if none has been found before "r_index", and returning
250 // "r_index" (which must be at most "size") in that case.
251 idx_t get_next_one_offset (idx_t l_index, idx_t r_index) const;
252 idx_t get_next_zero_offset(idx_t l_index, idx_t r_index) const;
253
254 idx_t get_next_one_offset(idx_t offset) const {
255 return get_next_one_offset(offset, size());
256 }
257 idx_t get_next_zero_offset(idx_t offset) const {
258 return get_next_zero_offset(offset, size());
|
219 void clear_range (idx_t beg, idx_t end);
220 void set_large_range (idx_t beg, idx_t end);
221 void clear_large_range (idx_t beg, idx_t end);
222 void at_put_range(idx_t beg, idx_t end, bool value);
223 void par_at_put_range(idx_t beg, idx_t end, bool value);
224 void at_put_large_range(idx_t beg, idx_t end, bool value);
225 void par_at_put_large_range(idx_t beg, idx_t end, bool value);
226
227 // Update a range of bits, using a hint about the size. Currently only
228 // inlines the predominant case of a 1-bit range. Works best when hint is a
229 // compile-time constant.
230 void set_range(idx_t beg, idx_t end, RangeSizeHint hint);
231 void clear_range(idx_t beg, idx_t end, RangeSizeHint hint);
232 void par_set_range(idx_t beg, idx_t end, RangeSizeHint hint);
233 void par_clear_range (idx_t beg, idx_t end, RangeSizeHint hint);
234
235 // Clearing
236 void clear_large();
237 inline void clear();
238
239 // Copying
240 void copy_from(BitMap& other, size_t start, size_t end);
241
242 // Iteration support. Returns "true" if the iteration completed, false
243 // if the iteration terminated early (because the closure "blk" returned
244 // false).
245 bool iterate(BitMapClosure* blk, idx_t leftIndex, idx_t rightIndex);
246 bool iterate(BitMapClosure* blk) {
247 // call the version that takes an interval
248 return iterate(blk, 0, size());
249 }
250
251 // Looking for 1's and 0's at indices equal to or greater than "l_index",
252 // stopping if none has been found before "r_index", and returning
253 // "r_index" (which must be at most "size") in that case.
254 idx_t get_next_one_offset (idx_t l_index, idx_t r_index) const;
255 idx_t get_next_zero_offset(idx_t l_index, idx_t r_index) const;
256
257 idx_t get_next_one_offset(idx_t offset) const {
258 return get_next_one_offset(offset, size());
259 }
260 idx_t get_next_zero_offset(idx_t offset) const {
261 return get_next_zero_offset(offset, size());
|