pub struct NodeTree<D, T> {
pub data: Option<D>,
pub node: Node<T>,
}Expand description
A hashmap-like data structure for organizing general data into recursive subnodes.
Data is indexed and traversed using paths. It retains the order of insertion.
ยง๐ Structure
All data is stored inside inner tree-like hierarchy. Each node can store users data and multiple subnodes.
> NodeTree
|-> Node_1
| |-> Node_2
| |-> Node_3
| | |-> Node_4
|-> Node_5
| |-> Node_6ยงโ๏ธ Paths
Paths are strings that are passed to the methods to retrive and mutate data.
For example "foo/bar/bar" is a valid path syntax. You need to construct paths always
from the point of view of the struct we pass them to. For example on the previous hierarchy:
If you want to access Node_4, you use path "Node_1/Node_3/Node_4" on NodeTree struct.
You can also use "Node_3/Node_4" on Node_1 struct to get the same result.
Whitespaces are allowed in paths, but are not encouraged.
Putting a dot as first symbol like this ".name" will hide the node from the tree.
Just "." will refer to the same node. ".." is not supported and is actually a valid name.
You can also not specify the name when creating a node. That means the name will be generated.
The format is as follows ".||#:N" with N being the .len() of the nodes hashmap.
ยง๐ฆ Types
- Generic
(D)- Master data schema struct defining what surface data can be stored inNodeTreefor all nodes to share. - Generic
(N)- Node data schema struct defining what node-specific data can be stored inNode
ยงโ ๏ธ Warning
Please refrain from manually using ".||#:0", ".||#:1", ".||#:2", โฆ as names or NodeGeneralTrait::add_node will return errors.
Fieldsยง
ยงdata: Option<D>ยงTop-level data
This top-level data is meant to be shared for every node. Example usage is storing theme and other surface data.
node: Node<T>ยงNode
The starting root node.
Trait Implementationsยง
Sourceยงimpl<D, T> Component for NodeTree<D, T>
impl<D, T> Component for NodeTree<D, T>
Sourceยงconst STORAGE_TYPE: StorageType = bevy::ecs::component::StorageType::Table
const STORAGE_TYPE: StorageType = bevy::ecs::component::StorageType::Table
Sourceยงfn register_component_hooks(_hooks: &mut ComponentHooks)
fn register_component_hooks(_hooks: &mut ComponentHooks)
ComponentHooks.Sourceยงimpl<D, T> NodeCreationTrait<T> for NodeTree<D, T>
impl<D, T> NodeCreationTrait<T> for NodeTree<D, T>
Sourceยงfn make_node(&mut self, name: impl Borrow<str>) -> Result<String, NodeError>
fn make_node(&mut self, name: impl Borrow<str>) -> Result<String, NodeError>
Sourceยงfn create_node(&mut self, path: impl Borrow<str>) -> Result<String, NodeError>
fn create_node(&mut self, path: impl Borrow<str>) -> Result<String, NodeError>
Sourceยงfn obtain_or_create_node(
&mut self,
name: impl Borrow<str>,
) -> Result<&Node<T>, NodeError>
fn obtain_or_create_node( &mut self, name: impl Borrow<str>, ) -> Result<&Node<T>, NodeError>
Sourceยงfn obtain_or_create_node_mut(
&mut self,
name: impl Borrow<str>,
) -> Result<&mut Node<T>, NodeError>
fn obtain_or_create_node_mut( &mut self, name: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>
Sourceยงimpl<D, T> NodeDataTrait<T> for NodeTree<D, T>
impl<D, T> NodeDataTrait<T> for NodeTree<D, T>
Sourceยงfn add_data(&mut self, data: T) -> Option<T>
fn add_data(&mut self, data: T) -> Option<T>
Sourceยงfn insert_data(
&mut self,
path: impl Borrow<str>,
data: T,
) -> Result<Option<T>, NodeError>
fn insert_data( &mut self, path: impl Borrow<str>, data: T, ) -> Result<Option<T>, NodeError>
Sourceยงfn remove_data(
&mut self,
path: impl Borrow<str>,
) -> Result<Option<T>, NodeError>
fn remove_data( &mut self, path: impl Borrow<str>, ) -> Result<Option<T>, NodeError>
Sourceยงfn obtain_data_mut(&mut self) -> Option<&mut T>
fn obtain_data_mut(&mut self) -> Option<&mut T>
Sourceยงimpl<D, T: NiceDisplay> NodeDisplayTrait<T> for NodeTree<D, T>
impl<D, T: NiceDisplay> NodeDisplayTrait<T> for NodeTree<D, T>
Sourceยงimpl<D, T> NodeGeneralTrait<T> for NodeTree<D, T>
impl<D, T> NodeGeneralTrait<T> for NodeTree<D, T>
Sourceยงfn add_node(
&mut self,
name: impl Borrow<str>,
node: impl Into<Node<T>>,
) -> Result<String, NodeError>
fn add_node( &mut self, name: impl Borrow<str>, node: impl Into<Node<T>>, ) -> Result<String, NodeError>
Sourceยงfn insert_node(
&mut self,
path: impl Borrow<str>,
node: impl Into<Node<T>>,
) -> Result<String, NodeError>
fn insert_node( &mut self, path: impl Borrow<str>, node: impl Into<Node<T>>, ) -> Result<String, NodeError>
Sourceยงfn take_node(&mut self, name: impl Borrow<str>) -> Result<Node<T>, NodeError>
fn take_node(&mut self, name: impl Borrow<str>) -> Result<Node<T>, NodeError>
Sourceยงfn remove_node(&mut self, path: impl Borrow<str>) -> Result<Node<T>, NodeError>
fn remove_node(&mut self, path: impl Borrow<str>) -> Result<Node<T>, NodeError>
Sourceยงfn obtain_node(&self, name: impl Borrow<str>) -> Result<&Node<T>, NodeError>
fn obtain_node(&self, name: impl Borrow<str>) -> Result<&Node<T>, NodeError>
Sourceยงfn obtain_node_mut(
&mut self,
name: impl Borrow<str>,
) -> Result<&mut Node<T>, NodeError>
fn obtain_node_mut( &mut self, name: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>
Sourceยงfn borrow_node(&self, path: impl Borrow<str>) -> Result<&Node<T>, NodeError>
fn borrow_node(&self, path: impl Borrow<str>) -> Result<&Node<T>, NodeError>
Sourceยงfn borrow_node_mut(
&mut self,
path: impl Borrow<str>,
) -> Result<&mut Node<T>, NodeError>
fn borrow_node_mut( &mut self, path: impl Borrow<str>, ) -> Result<&mut Node<T>, NodeError>
Sourceยงfn merge(&mut self, node: impl Into<Node<T>>) -> Result<(), NodeError>
fn merge(&mut self, node: impl Into<Node<T>>) -> Result<(), NodeError>
Sourceยงfn crawl(&self) -> Vec<&Node<T>>
fn crawl(&self) -> Vec<&Node<T>>
Sourceยงfn tree_node(&self, params: impl Borrow<str>) -> String
fn tree_node(&self, params: impl Borrow<str>) -> String
Sourceยงimpl<D, T> NodeTopDataTrait<D> for NodeTree<D, T>
impl<D, T> NodeTopDataTrait<D> for NodeTree<D, T>
Sourceยงfn add_topdata(&mut self, data: D) -> Option<D>
fn add_topdata(&mut self, data: D) -> Option<D>
Sourceยงfn take_topdata(&mut self) -> Option<D>
fn take_topdata(&mut self) -> Option<D>
Sourceยงfn obtain_topdata(&self) -> Option<&D>
fn obtain_topdata(&self) -> Option<&D>
Sourceยงfn obtain_topdata_mut(&mut self) -> Option<&mut D>
fn obtain_topdata_mut(&mut self) -> Option<&mut D>
Sourceยงimpl<D, T> NodeTreeInitTrait for NodeTree<D, T>
impl<D, T> NodeTreeInitTrait for NodeTree<D, T>
impl<D, T> StructuralPartialEq for NodeTree<D, T>
Auto Trait Implementationsยง
impl<D, T> Freeze for NodeTree<D, T>
impl<D, T> RefUnwindSafe for NodeTree<D, T>where
D: RefUnwindSafe,
T: RefUnwindSafe,
impl<D, T> Send for NodeTree<D, T>
impl<D, T> Sync for NodeTree<D, T>
impl<D, T> Unpin for NodeTree<D, T>
impl<D, T> UnwindSafe for NodeTree<D, T>where
D: UnwindSafe,
T: UnwindSafe,
Blanket Implementationsยง
Sourceยงimpl<T, U> AsBindGroupShaderType<U> for T
impl<T, U> AsBindGroupShaderType<U> for T
Sourceยงfn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> U
T ShaderType for self. When used in AsBindGroup
derives, it is safe to assume that all images in self exist.ยงimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
ยงfn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Sourceยงimpl<C> Bundle for Cwhere
C: Component,
impl<C> Bundle for Cwhere
C: Component,
fn component_ids( components: &mut Components, storages: &mut Storages, ids: &mut impl FnMut(ComponentId), )
unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
Sourceยงfn get_component_ids(
components: &Components,
ids: &mut impl FnMut(Option<ComponentId>),
)
fn get_component_ids( components: &Components, ids: &mut impl FnMut(Option<ComponentId>), )
ยงimpl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
ยงunsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)Sourceยงimpl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Sourceยงfn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Sourceยงfn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Sourceยงfn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Anyโs vtable from &Traitโs.Sourceยงfn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Anyโs vtable from &mut Traitโs.Sourceยงimpl<T> DowncastSync for T
impl<T> DowncastSync for T
Sourceยงimpl<C> DynamicBundle for Cwhere
C: Component,
impl<C> DynamicBundle for Cwhere
C: Component,
fn get_components(self, func: &mut impl FnMut(StorageType, OwningPtr<'_>))
Sourceยงimpl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Sourceยงfn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Self using data from the given World.