From 8a3dc83a93ad3dd06d2a80c8ec270ee5b921c182 Mon Sep 17 00:00:00 2001 From: Nova Date: Sun, 12 Jun 2022 02:25:09 -0400 Subject: [PATCH] refactor(scenegraph): use dashmap --- Cargo.toml | 1 + src/core/scenegraph.rs | 12 ++++++------ 2 files changed, 7 insertions(+), 6 deletions(-) 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) } }