DoxigAlpha

toggleAll

Flips every bit in the bit set.

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 toggleAll(self: *Self) void {
    const bit_length = self.bit_length;
    // avoid underflow if bit_length is zero
    if (bit_length == 0) return;

    const num_masks = numMasks(self.bit_length);
    for (self.masks[0..num_masks]) |*mask| {
        mask.* = ~mask.*;
    }

    const padding_bits = num_masks * @bitSizeOf(MaskInt) - bit_length;
    const last_item_mask = (~@as(MaskInt, 0)) >> @as(ShiftInt, @intCast(padding_bits));
    self.masks[num_masks - 1] &= last_item_mask;
}