DoxigAlpha

next

Returns the index of the next unvisited set bit in the bit set, in ascending order.

Function parameters

Parameters

#
self:*IterSelf

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 next(self: *IterSelf) ?usize {
    if (self.bits_remain == 0) return null;

    switch (direction) {
        .forward => {
            const next_index = @ctz(self.bits_remain);
            self.bits_remain &= self.bits_remain - 1;
            return next_index;
        },
        .reverse => {
            const leading_zeroes = @clz(self.bits_remain);
            const top_bit = (@bitSizeOf(MaskInt) - 1) - leading_zeroes;
            self.bits_remain &= (@as(MaskInt, 1) << @as(ShiftInt, @intCast(top_bit))) - 1;
            return top_bit;
        },
    }
}