#[macro_export]
macro_rules! is_set {
($bitmap: tt, $ty: ty, [..]) => {
{
$bitmap == !0
}
};
($bitmap: tt, $ty: ty, rev [..]) => {
{
$bitmap == !0
}
};
($bitmap: tt, $ty: ty, [$( $bit_pos: tt),*]) => {
{
let bits_to_check = ($( ((1 as $ty) << $bit_pos) | )* (0 as $ty));
(($bitmap as $ty) & bits_to_check) == bits_to_check
}
};
($bitmap: tt, $ty: ty, rev [$( $bit_pos: tt),*]) => {
{
let total_bit_count = $crate::max_bits!(type = ($ty));
let bits_to_check = ($( ((1 as $ty) << (total_bit_count - $bit_pos - 1)) | )* (0 as $ty));
(($bitmap as $ty) & bits_to_check) == bits_to_check
}
};
($bitmap: tt, $ty: ty, [$start_pos: tt .. $end_pos: tt]) => {
{
let mask = $crate::mask!([$start_pos..$end_pos], ($ty));
($bitmap & mask) == mask
}
};
($bitmap: tt, $ty: ty, [$start_pos: tt ..]) => {
{
let mask = $crate::mask!([$start_pos..], ($ty));
($bitmap & mask) == mask
}
};
($bitmap: tt, $ty: ty, [.. $end_pos: tt]) => {
{
let mask = $crate::mask!([..$end_pos], ($ty));
($bitmap & mask) == mask
}
};
($bitmap: tt, $ty: ty, [start = $start_pos: tt, count = $count: tt]) => {
{
let mask = $crate::mask!([start = $start_pos, count = $count], ($ty));
($bitmap & mask) == mask
}
};
($bitmap: tt, $ty: ty, rev [$start_pos: tt .. $end_pos: tt]) => {
{
let mask = $crate::mask!(rev [$start_pos..$end_pos], ($ty));
($bitmap & mask) == mask
}
};
($bitmap: tt, $ty: ty, rev [$start_pos: tt ..]) => {
{
let mask = $crate::mask!(rev [$start_pos..], ($ty));
($bitmap & mask) == mask
}
};
($bitmap: tt, $ty: ty, rev [.. $end_pos: tt]) => {
{
let mask = $crate::mask!(rev [..$end_pos], ($ty));
($bitmap & mask) == 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) == mask
}
};
($bitmap: tt, $ty: ty, rev $bit_pos: tt) => {
{
let total_bit_count = $crate::max_bits!(type = ($ty));
( ($bitmap as $ty) & ((1 as $ty) << (total_bit_count - $bit_pos - 1)) )
!= (0 as $ty)
}
};
($bitmap: tt, $ty: ty, $bit_pos: tt) => {
{
( ($bitmap as $ty) & ((1 as $ty) << $bit_pos) )
!= (0 as $ty)
}
};
}