evobench_tools/evaluator/data/
log_data_and_tree.rs

1use 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    /// `LogData::read_file` combined with `LogDataTree::from_logdata`
18    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}