Switching back to a Vec because inserting multiple elements into the linked list structure while maintaining ownership of each node proved to be difficult.
This commit is contained in:
@@ -5,11 +5,6 @@ use crate::renderer::context_element::IntoRcIce;
|
||||
use std::borrow::Borrow;
|
||||
use std::rc::Rc;
|
||||
|
||||
pub struct BreadcrumbTree<'a> {
|
||||
parent: Option<&'a BreadcrumbTree<'a>>,
|
||||
element: BreadcrumbTreeElement<'a>,
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug)]
|
||||
pub enum BreadcrumbTreeElement<'a> {
|
||||
// Using Rc so that when we need to create BreadcrumbTrees with
|
||||
@@ -54,43 +49,6 @@ impl<'a> From<IceResult<'a>> for BreadcrumbTreeElement<'a> {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> BreadcrumbTree<'a> {
|
||||
pub fn new(parent: Option<&'a BreadcrumbTree>, element: BreadcrumbTreeElement<'a>) -> Self {
|
||||
BreadcrumbTree {
|
||||
parent: parent,
|
||||
element: element,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_ice(&self) -> &dyn IntoContextElement {
|
||||
self.element.borrow()
|
||||
}
|
||||
|
||||
pub fn get_parent(&self) -> Option<&BreadcrumbTree> {
|
||||
self.parent
|
||||
}
|
||||
|
||||
pub fn get_element(&self) -> &BreadcrumbTreeElement<'a> {
|
||||
&self.element
|
||||
}
|
||||
|
||||
pub fn ice_iter(&'a self) -> impl Iterator<Item = &dyn IntoContextElement> {
|
||||
self.breadcrumb_iter().map(|b| b.get_ice())
|
||||
}
|
||||
|
||||
pub fn breadcrumb_iter(&'a self) -> BreadcrumbTreeIterator<'a> {
|
||||
BreadcrumbTreeIterator(Some(self))
|
||||
}
|
||||
|
||||
pub fn clone_to_new_parent(&self, parent: Option<&'a BreadcrumbTree>) -> Self {
|
||||
// TODO: Maybe not needed anymore?
|
||||
BreadcrumbTree {
|
||||
parent: parent,
|
||||
element: self.element.clone(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> Borrow<dyn IntoContextElement + 'a> for BreadcrumbTreeElement<'a> {
|
||||
fn borrow(&self) -> &(dyn IntoContextElement + 'a) {
|
||||
match self {
|
||||
@@ -99,24 +57,3 @@ impl<'a> Borrow<dyn IntoContextElement + 'a> for BreadcrumbTreeElement<'a> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl<'a> IntoIterator for &'a BreadcrumbTree<'a> {
|
||||
type Item = &'a BreadcrumbTree<'a>;
|
||||
type IntoIter = BreadcrumbTreeIterator<'a>;
|
||||
|
||||
fn into_iter(self) -> BreadcrumbTreeIterator<'a> {
|
||||
self.breadcrumb_iter()
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BreadcrumbTreeIterator<'a>(Option<&'a BreadcrumbTree<'a>>);
|
||||
|
||||
impl<'a> Iterator for BreadcrumbTreeIterator<'a> {
|
||||
type Item = &'a BreadcrumbTree<'a>;
|
||||
|
||||
fn next(&mut self) -> Option<Self::Item> {
|
||||
let ret = self.0;
|
||||
self.0 = self.0.map(|node| node.get_parent()).flatten();
|
||||
ret
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user