diff --git a/Cargo.toml b/Cargo.toml index 4935ae0..d2c5834 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,6 +9,7 @@ version = "0.9.0" libstardustxr = {path = "../libstardustxr-rs"} anyhow = "1.0.57" ctrlc = "3.2.2" +dashmap = "5.3.4" flexbuffers = "2.0.0" glam = {version = "0.20.5", features = ["mint"]} lazy_static = "1.4.0" diff --git a/src/core/scenegraph.rs b/src/core/scenegraph.rs index dfc7f30..32de32f 100644 --- a/src/core/scenegraph.rs +++ b/src/core/scenegraph.rs @@ -1,18 +1,17 @@ use crate::core::client::Client; use crate::nodes::core::Node; use anyhow::Result; +use dashmap::DashMap; use libstardustxr::scenegraph; use libstardustxr::scenegraph::ScenegraphError; -use parking_lot::RwLock; use rccell::RcCell; use std::cell::RefCell; -use std::collections::HashMap; use std::rc::{Rc, Weak}; #[derive(Default)] pub struct Scenegraph<'a> { client: RefCell>>, - pub nodes: RwLock>>>, + nodes: DashMap>>, } impl<'a> Scenegraph<'a> { @@ -27,16 +26,17 @@ impl<'a> Scenegraph<'a> { pub fn add_node(&self, node: Node<'a>) -> RcCell> { let path = node.get_path().to_string(); let node_rc = RcCell::new(node); - self.nodes.write().insert(path, node_rc.clone()); + self.nodes.insert(path, node_rc.clone()); node_rc } pub fn get_node(&self, path: &str) -> Option>> { - Some(self.nodes.read().get(path)?.clone()) + Some(self.nodes.get(path)?.clone()) } pub fn remove_node(&self, path: &str) -> Option>> { - self.nodes.write().remove(path) + let (_, node) = self.nodes.remove(path)?; + Some(node) } }