#[macro_export]
macro_rules! hashset {
(@single $($x:tt)*) => (());
(@count $($rest:expr),*) => (<[()]>::len(&[$(hashset!(@single $rest)),*]));
($($key:expr,)+) => { hashset!($($key),+) };
($($key:expr),*) => {
{
let _cap = hashset!(@count $($key),*);
let mut _set = ::std::collections::HashSet::with_capacity(_cap);
$(
let _ = _set.insert($key);
)*
_set
}
};
}
#[macro_export]
macro_rules! btreeset {
($($key:expr,)+) => (btreeset!($($key),+));
( $($key:expr),* ) => {
{
let mut _set = ::std::collections::BTreeSet::new();
$(
_set.insert($key);
)*
_set
}
};
}
#[macro_export]
macro_rules! hashmap {
(@single $($x:tt)*) => (());
(@count $($rest:expr),*) => (<[()]>::len(&[$(hashmap!(@single $rest)),*]));
($($key:expr => $value:expr,)+) => { hashmap!($($key => $value),+) };
($($key:expr => $value:expr),*) => {
{
let _cap = hashmap!(@count $($key),*);
let mut _map = ::std::collections::HashMap::with_capacity(_cap);
$(
let _ = _map.insert($key, $value);
)*
_map
}
};
}