DoxigAlpha

toggleFirstSet

Finds the index of the first set bit, and unsets it. If no bits are set, returns null.

Function parameters

Parameters

#
self:*Self

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 toggleFirstSet(self: *Self) ?usize {
    var offset: usize = 0;
    var mask = self.masks;
    while (offset < self.bit_length) {
        if (mask[0] != 0) break;
        mask += 1;
        offset += @bitSizeOf(MaskInt);
    } else return null;
    const index = @ctz(mask[0]);
    mask[0] &= (mask[0] - 1);
    return offset + index;
}