setRangeValue
Changes the value of all bits in the specified range to match the passed boolean.
Function parameters
Parameters
A bit set with runtime-known size, backed by an allocated slice
Types
- DynamicBitSetUnmanaged
- A bit set with runtime-known size, backed by an allocated slice
- DynamicBitSet
- A bit set with runtime-known size, backed by an allocated slice
- IteratorOptions
- Options for configuring an iterator over a bit set
- Range
- A range of indices within a bitset.
Returns the optimal static bit set type for the specified number
Functions
- StaticBitSet
- Returns the optimal static bit set type for the specified number
- IntegerBitSet
- A bit set with static size, which is backed by a single integer.
- ArrayBitSet
- A bit set with static size, which is backed by an array of usize.
Source
Implementation
pub fn setRangeValue(self: *Self, range: Range, value: bool) void {
assert(range.end <= bit_length);
assert(range.start <= range.end);
if (range.start == range.end) return;
if (MaskInt == u0) return;
const start_bit = @as(ShiftInt, @intCast(range.start));
var mask = std.math.boolMask(MaskInt, true) << start_bit;
if (range.end != bit_length) {
const end_bit = @as(ShiftInt, @intCast(range.end));
mask &= std.math.boolMask(MaskInt, true) >> @as(ShiftInt, @truncate(@as(usize, @bitSizeOf(MaskInt)) - @as(usize, end_bit)));
}
self.mask &= ~mask;
mask = std.math.boolMask(MaskInt, value) << start_bit;
if (range.end != bit_length) {
const end_bit = @as(ShiftInt, @intCast(range.end));
mask &= std.math.boolMask(MaskInt, value) >> @as(ShiftInt, @truncate(@as(usize, @bitSizeOf(MaskInt)) - @as(usize, end_bit)));
}
self.mask |= mask;
}