DoxigAlpha

setRangeValue

Changes the value of all bits in the specified range to match the passed boolean.

Function parameters

Parameters

#
self:*Self
value:bool

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;
}