pub use self::ToWriter::{Data, Header, Path, Round};
use std::collections::HashMap;
use crate::structure::matrix::Matrix;
#[derive(Debug, Clone, Copy, Hash, PartialOrd, PartialEq, Eq)]
pub enum ToWriter {
Header,
Round,
Data,
Path,
}
#[derive(Debug, Clone, Copy)]
pub enum Queue {
Matrix,
Vector,
}
#[derive(Debug, Clone)]
pub struct SimpleWriter {
header: Vec<String>,
round: u8,
matrices: Vec<Matrix>,
vectors: Vec<Vec<f64>>,
path: String,
queue: Vec<Queue>,
to_write: HashMap<ToWriter, bool>,
}
impl SimpleWriter {
pub fn new() -> SimpleWriter {
let mut default_to_write: HashMap<ToWriter, bool> = HashMap::new();
default_to_write.insert(Header, false);
default_to_write.insert(Round, false);
default_to_write.insert(Data, false);
default_to_write.insert(Path, false);
SimpleWriter {
header: vec![],
round: 0,
matrices: vec![],
vectors: vec![],
path: "".to_string(),
queue: vec![],
to_write: default_to_write,
}
}
pub fn insert_header(&mut self, head: Vec<&str>) -> &mut Self {
if let Some(x) = self.to_write.get_mut(&Header) {
*x = true
}
self.header = head
.into_iter()
.map(|t| t.to_owned())
.collect::<Vec<String>>();
self
}
pub fn set_round_level(&mut self, nth: u8) -> &mut Self {
if let Some(x) = self.to_write.get_mut(&Round) {
*x = true
}
self.round = nth;
self
}
pub fn insert_matrix(&mut self, mat: Matrix) -> &mut Self {
if let Some(x) = self.to_write.get_mut(&Data) {
*x = true
}
self.matrices.push(mat);
self.queue.push(Queue::Matrix);
self
}
pub fn insert_vector(&mut self, vec: Vec<f64>) -> &mut Self {
if let Some(x) = self.to_write.get_mut(&Data) {
*x = true
}
self.vectors.push(vec);
self.queue.push(Queue::Vector);
self
}
pub fn set_path(&mut self, path: &str) -> &mut Self {
if let Some(x) = self.to_write.get_mut(&Path) {
*x = true
}
self.path = path.to_owned();
self
}
pub fn write_csv(self) {
unimplemented!()
}
}