generalized_suffix_tree/
data.rs1pub 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}