use alloc::vec::Vec;
use crate::compressor::core::codecs::FnEncoder;
use crate::compressor::core::data::Stream;
use crate::compressor::core::error::NodeError;
use crate::compressor::core::exec::NodeCx;
use crate::shared::byte_transpose;
pub(crate) static TRANSPOSE_SPLIT: FnEncoder = FnEncoder(transpose_split);
fn transpose_split<'a>(cx: &mut NodeCx<'_, 'a>, inputs: &[Stream<'a>]) -> Result<(), NodeError> {
let input = &inputs[0];
let width = input.width();
let n_elts = input.n_elts();
let mut lanes: Vec<Vec<u8>> = (0..width).map(|_| Vec::new()).collect();
byte_transpose::split(cx.simd, &input.bytes()[..n_elts * width], &mut lanes);
for lane in lanes {
cx.emit(0, 1, lane)?;
}
Ok(())
}