#[macro_export]
macro_rules! count_exprs {
() => { 0 };
($head:expr $(, $tail:expr)* $(,)?) => {
1 + $crate::count_exprs!( $($tail),* )
};
}
#[macro_export]
macro_rules! terms {
( $( [ $coeff:expr, [ $( $func:expr ),* $(,)? ] ] ),* $(,)? ) => {
[
$(
$crate::term::Term::new($coeff, [ $( $func ),* ])
),*
]
};
}
#[macro_export]
macro_rules! const_poly {
( [ $coeff:expr $(, $func:expr )* $(,)? ] ) => {{
const __N: usize = $crate::count_exprs!( $( $func ),* );
const __TERMS: [ $crate::term::Term<__N>; 1 ] = [
$crate::term::Term::new($coeff, [ $( $func ),* ])
];
$crate::polynomial::Polynomial::<__N>::new(&__TERMS)
}};
({
[ $coeff_first:expr $(, $func_first:expr )* ]
$(, [ $coeff_rest:expr $(, $func_rest:expr )* ] )* $(,)?
}) => {{
const __N: usize = $crate::count_exprs!( $( $func_first ),* );
const __TERMS: &[ $crate::term::Term<__N> ] = &[
$crate::term::Term::new($coeff_first, [ $( $func_first ),* ]),
$( $crate::term::Term::new($coeff_rest, [ $( $func_rest ),* ]) ),*
];
$crate::polynomial::Polynomial::<__N>::new(__TERMS)
}};
}