use crate::errors::UltraGraphError;
use crate::prelude::{GraphLike, GraphRoot, GraphStorage};
use super::{NodeIndex, UltraMatrixGraph};
impl<T> GraphRoot<T> for UltraMatrixGraph<T> {
fn add_root_node(&mut self, value: T) -> usize {
let idx = self.add_node(value);
let root_index = NodeIndex::new(idx);
self.root_index = Some(root_index);
self.index_map.insert(root_index.index(), root_index);
root_index.index()
}
fn contains_root_node(&self) -> bool {
self.root_index.is_some()
}
fn get_root_node(&self) -> Option<&T> {
if self.contains_root_node() {
self.node_map.get(&self.root_index.unwrap())
} else {
None
}
}
fn get_root_index(&self) -> Option<usize> {
if self.contains_root_node() {
Some(self.root_index.unwrap().index())
} else {
None
}
}
fn get_last_index(&self) -> Result<usize, UltraGraphError> {
if !self.is_empty() {
Ok(self.node_map.len())
} else {
Err(UltraGraphError("Graph is empty".to_string()))
}
}
}