#[macro_export]
macro_rules! unset {
($bitmap: tt, $ty: ty, [..]) => {
{
(0 as $ty)
}
};
(in $bitmap: ident, $ty: ty, [..]) => {
{
$bitmap = (0 as $ty);
}
};
($bitmap: tt, $ty: ty, rev [..]) => {
{
(0 as $ty)
}
};
(in $bitmap: ident, $ty: ty, rev [..]) => {
{
$bitmap = (0 as $ty);
}
};
($bitmap: tt, $ty: ty, [$( $bit_pos: tt),*]) => {
{
($bitmap as $ty) & !($( ((1 as $ty) << $bit_pos) | )* (0 as $ty))
}
};
(in $bitmap: ident, $ty: ty, [$( $bit_pos: tt),*]) => {
$bitmap &= !($( ((1 as $ty) << $bit_pos) | )* (0 as $ty));
};
($bitmap: tt, $ty: ty, rev [$( $bit_pos: tt),*]) => {
{
($bitmap as $ty)
& !($( ((1 as $ty) << ($crate::max_bits!(type = ($ty)) - $bit_pos - 1)) | )* (0 as $ty))
}
};
(in $bitmap: ident, $ty: ty, rev [$( $bit_pos: tt),*]) => {
$bitmap &= !($( ((1 as $ty) << ($crate::max_bits!(type = ($ty)) - $bit_pos - 1)) | )* (0 as $ty));
};
($bitmap: tt, $ty: ty, [$start_pos: tt .. $end_pos: tt]) => {
{
let mask = $crate::mask!([($start_pos)..($end_pos)], ($ty));
$bitmap & !mask
}
};
($bitmap: tt, $ty: ty, [$start_pos: tt ..]) => {
{
let mask = $crate::mask!([($start_pos)..], ($ty));
$bitmap & !mask
}
};
($bitmap: tt, $ty: ty, [.. $end_pos: tt]) => {
{
let mask = $crate::mask!([..($end_pos)], ($ty));
$bitmap & !mask
}
};
(in $bitmap: ident, $ty: ty, [$start_pos: tt .. $end_pos: tt]) => {
let mask = $crate::mask!([($start_pos)..($end_pos)], ($ty));
$bitmap &= !mask;
};
(in $bitmap: ident, $ty: ty, [.. $end_pos: tt]) => {
let mask = $crate::mask!([..($end_pos)], ($ty));
$bitmap &= !mask;
};
(in $bitmap: ident, $ty: ty, [$start_pos: tt ..]) => {
let mask = $crate::mask!([($start_pos)..], ($ty));
$bitmap &= !mask;
};
($bitmap: tt, $ty: ty, [start = $start_pos: tt, count = $count: tt]) => {
{
let mask = $crate::mask!([start = ($start_pos), count = ($count)], ($ty));
$bitmap & !mask
}
};
(in $bitmap: ident, $ty: ty, [start = $start_pos: tt, count = $count: tt]) => {
let mask = $crate::mask!([start = ($start_pos), count = ($count)], $ty);
$bitmap &= !mask;
};
($bitmap: tt, $ty: ty, rev [$start_pos: tt .. $end_pos: tt]) => {
{
let mask = $crate::mask!(rev [($start_pos)..($end_pos)], ($ty));
$bitmap & !mask
}
};
($bitmap: tt, $ty: ty, rev [$start_pos: tt ..]) => {
{
let mask = $crate::mask!(rev [($start_pos)..], ($ty));
$bitmap & !mask
}
};
($bitmap: tt, $ty: ty, rev [.. $end_pos: tt]) => {
{
let mask = $crate::mask!(rev [..($end_pos)], ($ty));
$bitmap & !mask
}
};
(in $bitmap: ident, $ty: ty, rev [$start_pos: tt .. $end_pos: tt]) => {
let mask = $crate::mask!(rev [($start_pos)..($end_pos)], ($ty));
$bitmap &= !mask;
};
(in $bitmap: ident, $ty: ty, rev [.. $end_pos: tt]) => {
let mask = $crate::mask!(rev [..($end_pos)], ($ty));
$bitmap &= !mask;
};
(in $bitmap: ident, $ty: ty, rev [$start_pos: tt ..]) => {
let mask = $crate::mask!(rev [($start_pos)..], ($ty));
$bitmap &= !mask;
};
($bitmap: tt, $ty: ty, rev [start = $start_pos: tt, count = $count: tt]) => {
{
let mask = $crate::mask!(rev [start = ($start_pos), count = ($count)], ($ty));
$bitmap & !mask
}
};
(in $bitmap: ident, $ty: ty, rev [start = $start_pos: tt, count = $count: tt]) => {
let mask = $crate::mask!(rev [start = ($start_pos), count = ($count)], ($ty));
$bitmap &= !mask;
};
($bitmap: tt, $ty: ty, rev $bit_pos: tt) => {
{
($bitmap as $ty) & !((1 as $ty) << ($crate::max_bits!(type = ($ty)) - $bit_pos - 1))
}
};
(in $bitmap: ident, $ty: ty, rev $bit_pos: tt) => {
$bitmap &= !((1 as $ty) << ($crate::max_bits!(type = ($ty)) - $bit_pos - 1));
};
($bitmap: tt, $ty: ty, $bit_pos: tt) => {
{
($bitmap as $ty) & !((1 as $ty) << $bit_pos)
}
};
(in $bitmap: ident, $ty: ty, $bit_pos: tt) => {
$bitmap &= !((1 as $ty) << $bit_pos);
};
}