#[macro_export]
macro_rules! and {
[$one:expr] => {
::repr::Repr::from($one)
};
[$one:expr, $two:expr] => {
::repr::Repr::from($one) & ::repr::Repr::from($two)
};
[$one:expr, $($repr:expr),*] => {
::repr::Repr::from($one) & and![$($repr:expr),*]
}
}
#[macro_export]
macro_rules! or {
[$one:expr] => {
::repr::Repr::from($one)
};
[$one:expr, $two:expr] => {
::repr::Repr::from($one) | ::repr::Repr::from($two)
};
[$one:expr, $($repr:expr),*] => {
::repr::Repr::from($one) | or![$($repr:expr),*]
}
}
#[macro_export]
macro_rules! xor {
[$one:expr] => {
::repr::Repr::from($one)
};
[$one:expr, $two:expr] => {
::repr::Repr::from($one) ^ ::repr::Repr::from($two)
};
[$one:expr, $($repr:expr),*] => {
::repr::Repr::from($one) ^ xor![$($repr:expr),*]
}
}
#[macro_export]
macro_rules! i {
($lhs:literal .. $rhs:literal) => {
Repr::Interval((lhs..rhs).into())
};
}
#[macro_export]
macro_rules! p {
($lhs:tt | $rhs:tt) => {
Repr::from(stringify!($lhs)) | stringify!($rhs)
};
}
#[macro_export]
macro_rules! c {
($tt:literal) => {
Repr::from($tt)
};
}
#[macro_export]
macro_rules! e {
($tt:tt) => {
Repr::from(format!(r"\{}", stringify!($tt)));
};
}
#[macro_export]
macro_rules! delimit {
($tt:expr) => {
Repr::new(r"\(") & $tt & Repr::new(r"\)")
};
{$tt:expr} => {
Repr::new(r"\{") & $tt & Repr::new(r"\}")
};
[$tt:expr] => {
Repr::new(r"\[") & $tt & Repr::new(r"\]")
};
}