perm_tab.push(0); // size = 1
perm_tab.push(0); // size = 2
perm_tab.push(1);
- for blen in 2..bits+1 {
+ for blen in 2..=bits {
let ssize = 1 << blen;
for i in 0..ssize { perm_tab.push(swp_idx(i, blen)); }
}
tab.push((consts::PI / 8.0).sin()); // size = 1
tab.push((consts::PI / 8.0).cos());
if bits > 1 {
- for blen in 1..bits+1 {
+ for blen in 1..=bits {
let tsize = 1 << blen;
let base = consts::PI / ((tsize * 8) as f32);
for i in 0..tsize {
},*/
_ => { tab = Vec::new(); },
};
-
+
Self { tmp, tab, mode, size, swaps, perms, is_pow2, perm_tab }
}
fn can_do_fast(&mut self) -> bool {
let mut val = inval;
for _ in 0..8 {
ret = (ret << 4) | (REV_TAB[(val & 0xF) as usize] as u32);
- val = val >> 4;
+ val >>= 4;
}
ret
}
s >> (32 - bits)
}
-fn gen_swaps_for_perm(swaps: &mut Vec<usize>, perms: &Vec<usize>) {
+fn gen_swaps_for_perm(swaps: &mut Vec<usize>, perms: &[usize]) {
let mut idx_arr: Vec<usize> = Vec::with_capacity(perms.len());
for i in 0..perms.len() { idx_arr.push(i); }
let mut run_size = 0;
}
}
-fn swap_buf(buf: &mut [f32], swaps: &Vec<usize>) {
+fn swap_buf(buf: &mut [f32], swaps: &[usize]) {
for (idx, nidx) in swaps.iter().enumerate() {
if idx != *nidx {
- let t = buf[*nidx];
- buf[*nidx] = buf[idx];
- buf[idx] = t;
+ buf.swap(*nidx, idx);
}
}
}
for i in 0..hsize {
let idx0 = i * step;
let idx1 = (size - 1 - i) * step;
- let t = buf[idx1];
- buf[idx1] = buf[idx0];
- buf[idx0] = t;
+ buf.swap(idx0, idx1);
}
}
dct_III_inplace(buf, hsize, step, tab, perm_tab);
dct_IV_inplace(&mut buf[step*hsize..], hsize, step, tab, perm_tab);
for i in 0..(size >> 2) {
- let t = buf[(size - 1 - i) * step];
- buf[(size - 1 - i) * step] = buf[(hsize + i) * step];
- buf[(hsize + i) * step] = t;
+ buf.swap((size - 1 - i) * step, (hsize + i) * step);
}
for i in 0..hsize {
let i0 = buf[i * step] / consts::SQRT_2;
for i in 0..hsize {
let idx0 = i * step;
let idx1 = (size - 1 - i) * step;
- let t = buf[idx1];
- buf[idx1] = buf[idx0];
- buf[idx0] = t;
+ buf.swap(idx0, idx1);
}
dct_III_inplace(buf, size, step, tab, perm_tab);
for i in 0..hsize { buf[i * 2 * step + step] = -buf[i * 2 * step + step]; }
dct_II_inplace(buf, hsize, step * 2, tab, perm_tab);
dct_II_inplace(&mut buf[step..], hsize, step * 2, tab, perm_tab);
for i in 0..(size >> 2) {
- let t = buf[(size - 1 - i * 2) * step];
- buf[(size - 1 - i * 2) * step] = buf[(i * 2 + 1) * step];
- buf[(i * 2 + 1) * step] = t;
+ buf.swap((size - 1 - i * 2) * step, (i * 2 + 1) * step);
}
for i in (3..size).step_by(4) {
buf[i] = -buf[i];