generalized_suffix_tree/
data.rs

1pub mod tree_item;
2
3use std::fmt;
4use core::fmt::{Debug, Display};
5use std::hash::Hash;
6use itertools::Itertools;
7use serde::{Serialize, Deserialize};
8use crate::data::tree_item::{TreeItem as OtherTreeItem, Character};
9use crate::suffix_node::node::NodeID;
10
11#[derive(Debug, Hash, Eq, PartialEq, Clone, Serialize, Deserialize)]
12pub struct TreeItem<T, U>
13where
14    T: Display + Debug + PartialEq + PartialOrd,
15    U: Display + Debug + PartialEq + Hash
16{
17    string: Vec<Character<T>>,
18    id: U,
19    nodes: Vec<NodeID>,
20}
21
22
23impl<T, U> OtherTreeItem<T, U> for TreeItem<T, U> 
24where
25    T: Display + Debug + Eq + PartialEq + PartialOrd,
26    U: Display + Debug + Eq + PartialEq + Hash
27{
28    fn new(k: U, v: Vec<T>)->Self{
29        TreeItem { string: v.into_iter().map(|x| Character::Char(x)).collect_vec(), id: k , nodes: vec![]}
30    }
31
32    fn get_string(&self) -> &[Character<T>]{
33        self.string.as_slice()
34    }
35
36    fn get_id(&self) -> &U{
37        &self.id
38    }
39
40    fn get_nodes(&self) -> impl ExactSizeIterator<Item= &NodeID>{
41        self.nodes.iter()
42    }
43
44    fn add_data_to_node(&mut self, node_id: &NodeID) {
45        self.nodes.push(*node_id)
46    }
47}
48
49
50impl<T, U> Display for TreeItem<T, U> 
51where
52    T: Display + Debug + Eq + PartialEq + PartialOrd + Hash,
53    U: Display + Debug + Eq + PartialEq + Hash
54{
55    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
56        writeln!(f, "String ID: {}", self.get_id())?;
57        write!(f, "String: ")?;
58        for v in self.get_string() {
59            write!(f, "{}", v)?;
60        }
61        writeln!(f)?;
62        Ok(())
63    }
64
65}