#[macro_export]
macro_rules! set {
(priv $set:ident {$_:ident},) => {};
(priv-range $set:ident {$set_bit:ident}, $range:expr) => {{
for index in $range {
$crate::BitsMut::$set_bit(&mut $set, index);
}
}};
(priv $set:ident {$($tt:tt)*}, $from:literal ..= $to:literal) => {{
$crate::set!(priv-range $set {$($tt)*}, $from ..= $to);
}};
(priv $set:ident {$($tt:tt)*}, $from:literal ..= $to:literal, $($rest:tt)*) => {{
$crate::set!(priv-range $set {$($tt)*}, $from ..= $to);
$crate::set!(priv $set {$($tt)*}, $($rest)*);
}};
(priv $set:ident {$($tt:tt)*}, $from:literal .. $to:literal) => {{
$crate::set!(priv-range $set {$($tt)*}, $from .. $to);
}};
(priv $set:ident {$($tt:tt)*}, $from:literal .. $to:literal, $($rest:tt)*) => {{
$crate::set!(priv-range $set {$($tt)*}, $from .. $to);
$crate::set!(priv $set {$($tt)*}, $($rest)*);
}};
(priv $set:ident {$($tt:tt)*}, $from:literal ..) => {{
$crate::set!(priv-range $set {$($tt)*}, $from .. $crate::Bits::bits_capacity(&$set));
}};
(priv $set:ident {$($tt:tt)*}, $from:literal .., $($rest:tt)*) => {{
$crate::set!(priv-range $set {$($tt)*}, $from .. $crate::Bits::bits_capacity(&$set));
$crate::set!(priv $set {$($tt)*}, $($rest)*);
}};
(priv $set:ident {$set_bit:ident}, $index:expr) => {{
$crate::BitsMut::$set_bit(&mut $set, $index);
}};
(priv $set:ident {$($tt:tt)*}, $index:expr, $($rest:tt)*) => {{
$crate::set!(priv $set {$($tt)*}, $index);
$crate::set!(priv $set {$($tt)*}, $($rest)*);
}};
($($tt:tt)*) => {{
let mut set = $crate::BitsOwned::ZEROS;
$crate::set!(priv set {set_bit}, $($tt)*);
set
}};
}
#[macro_export]
macro_rules! set_le {
($($tt:tt)*) => {{
let mut set = $crate::BitsOwned::ZEROS;
$crate::set!(priv set {set_bit_le}, $($tt)*);
set
}};
}
#[macro_export]
macro_rules! set_be {
($($tt:tt)*) => {{
let mut set = $crate::BitsOwned::ZEROS;
$crate::set!(priv set {set_bit_be}, $($tt)*);
set
}};
}