use std::io::Read;
use crate::constants::{Alignment, Measure};
use crate::error::Result;
use crate::io_utils::SavReader;
#[derive(Debug, Clone)]
pub struct VarDisplayEntry {
pub measure: Measure,
pub width: u32,
pub alignment: Alignment,
}
pub fn parse_var_display<R: Read>(
reader: &mut SavReader<R>,
count: i32,
) -> Result<Vec<VarDisplayEntry>> {
let count = count as usize;
let has_width = count.is_multiple_of(3);
let n_vars = if has_width { count / 3 } else { count / 2 };
let mut entries = Vec::with_capacity(n_vars);
for _ in 0..n_vars {
let measure = Measure::from_i32(reader.read_i32()?);
let width = if has_width {
reader.read_i32()? as u32
} else {
8
};
let alignment = Alignment::from_i32(reader.read_i32()?);
entries.push(VarDisplayEntry {
measure,
width,
alignment,
});
}
Ok(entries)
}