pub(super) fn reformat_q1_aos_to_soa(aos_bytes: &[u8]) -> Option<Vec<u8>> {
const BLOCK_SIZE: usize = 18;
const SCALE_SIZE: usize = 2;
const DATA_SIZE: usize = 16;
if aos_bytes.is_empty() || aos_bytes.len() % BLOCK_SIZE != 0 {
return None;
}
let n_blocks = aos_bytes.len() / BLOCK_SIZE;
let mut soa = vec![0u8; n_blocks * BLOCK_SIZE];
let (scales_section, data_section) = soa.split_at_mut(n_blocks * SCALE_SIZE);
for i in 0..n_blocks {
let block_start = i * BLOCK_SIZE;
scales_section[i * SCALE_SIZE..i * SCALE_SIZE + SCALE_SIZE]
.copy_from_slice(&aos_bytes[block_start..block_start + SCALE_SIZE]);
data_section[i * DATA_SIZE..i * DATA_SIZE + DATA_SIZE]
.copy_from_slice(&aos_bytes[block_start + SCALE_SIZE..block_start + BLOCK_SIZE]);
}
Some(soa)
}
pub(super) fn reformat_tq2_aos_to_soa(aos_bytes: &[u8]) -> Option<Vec<u8>> {
const BLOCK_SIZE: usize = 34;
const SCALE_SIZE: usize = 2;
const DATA_SIZE: usize = 32;
if aos_bytes.is_empty() || aos_bytes.len() % BLOCK_SIZE != 0 {
return None;
}
let n_blocks = aos_bytes.len() / BLOCK_SIZE;
let mut soa = vec![0u8; n_blocks * BLOCK_SIZE];
let (scales_section, data_section) = soa.split_at_mut(n_blocks * SCALE_SIZE);
for i in 0..n_blocks {
let block_start = i * BLOCK_SIZE;
data_section[i * DATA_SIZE..i * DATA_SIZE + DATA_SIZE]
.copy_from_slice(&aos_bytes[block_start..block_start + DATA_SIZE]);
scales_section[i * SCALE_SIZE..i * SCALE_SIZE + SCALE_SIZE]
.copy_from_slice(&aos_bytes[block_start + DATA_SIZE..block_start + BLOCK_SIZE]);
}
Some(soa)
}