evobench_tools/evaluator/data/
log_data_and_tree.rs1use std::{path::Path, time::SystemTime};
2
3use anyhow::Result;
4use ouroboros::self_referencing;
5
6use crate::evaluator::data::{log_data::LogData, log_data_tree::LogDataTree};
7
8#[self_referencing]
9pub struct LogDataAndTree {
10 log_data: LogData,
11 #[borrows(log_data)]
12 #[covariant]
13 tree: LogDataTree<'this>,
14}
15
16impl LogDataAndTree {
17 pub fn read_file(path: &Path, uncompressed_path: Option<&Path>) -> Result<Self> {
19 let t0 = SystemTime::now();
20 let log_data = LogData::read_file(path, uncompressed_path)?;
21
22 let t1 = SystemTime::now();
23 let r = LogDataAndTree::try_new(log_data, |log_data| LogDataTree::from_logdata(log_data));
24 let t2 = SystemTime::now();
25
26 eprintln!(
27 "t LogData::read_file: {} s",
28 t1.duration_since(t0)?.as_secs_f64()
29 );
30 eprintln!(
31 "t LogDataAndTree::try_new: {} s",
32 t2.duration_since(t1)?.as_secs_f64()
33 );
34
35 r
36 }
37
38 pub fn log_data(&self) -> &LogData {
39 self.borrow_log_data()
40 }
41
42 pub fn tree(&self) -> &LogDataTree<'_> {
43 self.borrow_tree()
44 }
45}