treams_core/smatrix/
saved.rs

1//! Shared fixed-layout numerical state helpers for planar residuals.
2//!
3//! treams-rs extension. Each enclosing residual checks its complete byte count
4//! before these helpers allocate matrices; dimensions are part of that header.
5
6use super::StoredBlock;
7pub(super) use crate::saved::{
8    invalid, product, read_complex, read_f64, read_matrix, total, write_matrix,
9};
10use crate::{
11    Result,
12    saved::{Reader, Writer},
13};
14
15pub(super) fn write_stored(writer: &mut Writer, block: &StoredBlock) {
16    writer.byte(u8::from(block.row_major));
17    write_matrix(writer, &block.values);
18}
19
20pub(super) fn read_stored(reader: &mut Reader<'_>, n: usize) -> Result<StoredBlock> {
21    let row_major = match reader.byte()? {
22        0 => false,
23        1 => true,
24        _ => return Err(invalid()),
25    };
26    Ok(StoredBlock {
27        values: read_matrix(reader, n, n)?,
28        row_major,
29    })
30}