1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
/// Create a `BitSet` from a list of elements.
///
/// ## Example
/// ```
/// #[macro_use] extern crate fbas_analyzer;
///
/// let set = bitset!{23, 42};
/// assert!(set.contains(23));
/// assert!(set.contains(42));
/// assert!(!set.contains(100));
/// ```
#[macro_export]
macro_rules! bitset {
(@single $($x:tt)*) => (());
(@count $($rest:expr),*) => (<[()]>::len(&[$(bitset!(@single $rest)),*]));
() => { ::bit_set::BitSet::new() };
($($key:expr,)+) => { bitset!($($key),+) };
($($key:expr),*) => {
{
let _cap = bitset!(@count $($key),*);
let mut _set = ::bit_set::BitSet::with_capacity(_cap);
$(
let _ = _set.insert($key);
)*
_set
}
};
}
/// Create a `Vec<BitSet>` from a list of sets.
///
/// ## Example
/// ```
/// #[macro_use] extern crate fbas_analyzer;
///
/// let actual = bitsetvec![[0, 1], [23, 42]];
/// let expected = vec![bitset![0, 1], bitset![23, 42]];
/// assert_eq!(expected, actual);
/// ```
#[macro_export]
macro_rules! bitsetvec {
($($setcontent:tt),*) => {
{
vec![
$(
bitset!$setcontent
),*
]
}
};
}