use crate::bitman::Bits;
use crate::bitman::NOnesOffset;
use core::ops::BitOr;
pub trait SetBit {
type Type;
fn set_bit(&self, index: Self::Type) -> Self::Type;
}
macro_rules! ImplementSetBit {
($type:ty) => {
impl SetBit for $type {
type Type = Self;
#[inline]
#[must_use]
fn set_bit(&self, index: Self) -> Self {
assert!(index < Self::bits(), "invalid bit index");
let mask = Self::n_ones_offset(1, index);
self.bitor(mask)
}
}
};
}
ImplementSetBit!(u8);
ImplementSetBit!(u32);
ImplementSetBit!(u64);