use crate::alloc::vec::Vec;
pub fn mtf_transform(data: &[u8]) -> Vec<u8> {
let mut alphabet: Vec<u8> = (0..=255).collect();
let mut out = Vec::with_capacity(data.len());
for &b in data {
let pos = alphabet.iter().position(|&x| x == b).unwrap();
out.push(pos as u8);
let val = alphabet.remove(pos);
alphabet.insert(0, val);
}
out
}
pub fn mtf_inverse(data: &[u8]) -> Vec<u8> {
let mut alphabet: Vec<u8> = (0..=255).collect();
let mut out = Vec::with_capacity(data.len());
for &pos in data {
let b = alphabet[pos as usize];
out.push(b);
let val = alphabet.remove(pos as usize);
alphabet.insert(0, val);
}
out
}