use template::RdxSortTemplate;
macro_rules! impl_rdxsort {
($n:expr) => {
impl<T> RdxSortTemplate for [T; $n] where T: RdxSortTemplate {
#[inline]
fn cfg_nbuckets() -> usize {
T::cfg_nbuckets()
}
#[inline]
fn cfg_nrounds() -> usize {
T::cfg_nrounds() * $n
}
#[inline]
fn get_bucket(&self, round: usize) -> usize {
let i = round / T::cfg_nrounds();
let j = round % T::cfg_nrounds();
self[$n - i - 1].get_bucket(j)
}
#[inline]
fn reverse(round: usize, bucket: usize) -> bool {
let j = round % T::cfg_nrounds();
T::reverse(j, bucket)
}
}
}
}
impl_rdxsort!( 0);
impl_rdxsort!( 1);
impl_rdxsort!( 2);
impl_rdxsort!( 3);
impl_rdxsort!( 4);
impl_rdxsort!( 5);
impl_rdxsort!( 6);
impl_rdxsort!( 7);
impl_rdxsort!( 8);
impl_rdxsort!( 9);
impl_rdxsort!(10);
impl_rdxsort!(11);
impl_rdxsort!(12);
impl_rdxsort!(13);
impl_rdxsort!(14);
impl_rdxsort!(15);
impl_rdxsort!(16);
impl_rdxsort!(17);
impl_rdxsort!(18);
impl_rdxsort!(19);
impl_rdxsort!(20);
impl_rdxsort!(21);
impl_rdxsort!(22);
impl_rdxsort!(23);
impl_rdxsort!(24);
impl_rdxsort!(25);
impl_rdxsort!(26);
impl_rdxsort!(27);
impl_rdxsort!(28);
impl_rdxsort!(29);
impl_rdxsort!(30);
impl_rdxsort!(31);
impl_rdxsort!(32);