From c272cfaed1b005e6dbf76738d39b370ef9eb2fc5 Mon Sep 17 00:00:00 2001 From: Nova Date: Wed, 17 Aug 2022 19:28:52 -0400 Subject: [PATCH] feat(registry): const initialization meaning no necessary lazy_static --- src/core/registry.rs | 12 +++++------- src/nodes/core.rs | 2 +- src/nodes/data.rs | 7 ++----- src/nodes/input.rs | 7 ++----- src/nodes/item.rs | 10 +++++----- src/nodes/model.rs | 2 +- src/nodes/root.rs | 5 +---- 7 files changed, 17 insertions(+), 28 deletions(-) diff --git a/src/core/registry.rs b/src/core/registry.rs index 70c1d5b..c1e80a8 100644 --- a/src/core/registry.rs +++ b/src/core/registry.rs @@ -5,11 +5,15 @@ use std::sync::{Arc, Weak}; use core::hash::BuildHasherDefault; use dashmap::DashMap; +use once_cell::sync::Lazy; use rustc_hash::FxHasher; -pub struct Registry(DashMap, BuildHasherDefault>); +pub struct Registry(Lazy, BuildHasherDefault>>); impl Registry { + pub const fn new() -> Self { + Registry(Lazy::new(|| DashMap::default())) + } pub fn add(&self, t: T) -> Arc { let t_arc = Arc::new(t); self.add_raw(&t_arc); @@ -32,9 +36,3 @@ impl Registry { self.0.clear(); } } - -impl Default for Registry { - fn default() -> Self { - Registry(DashMap::default()) - } -} diff --git a/src/nodes/core.rs b/src/nodes/core.rs index 4123c7d..f638627 100644 --- a/src/nodes/core.rs +++ b/src/nodes/core.rs @@ -74,7 +74,7 @@ impl Node { destroyable: AtomicBool::from(destroyable), alias: OnceCell::new(), - aliases: Default::default(), + aliases: Registry::new(), spatial: OnceCell::new(), field: OnceCell::new(), diff --git a/src/nodes/data.rs b/src/nodes/data.rs index 180bc40..bd64e24 100644 --- a/src/nodes/data.rs +++ b/src/nodes/data.rs @@ -6,16 +6,13 @@ use crate::core::nodelist::LifeLinkedNodeList; use crate::core::registry::Registry; use anyhow::{anyhow, ensure, Result}; use glam::{vec3a, Mat4}; -use lazy_static::lazy_static; use libstardustxr::flex::flexbuffer_from_vector_arguments; use libstardustxr::{flex_to_quat, flex_to_vec3}; use parking_lot::Mutex; use std::sync::{Arc, Weak}; -lazy_static! { - static ref PULSE_SENDER_REGISTRY: Registry = Default::default(); - static ref PULSE_RECEIVER_REGISTRY: Registry = Default::default(); -} +static PULSE_SENDER_REGISTRY: Registry = Registry::new(); +static PULSE_RECEIVER_REGISTRY: Registry = Registry::new(); fn mask_matches(mask_map_lesser: &Mask, mask_map_greater: &Mask) -> bool { (|| -> Result<_> { diff --git a/src/nodes/input.rs b/src/nodes/input.rs index 04f6577..a75c7c5 100644 --- a/src/nodes/input.rs +++ b/src/nodes/input.rs @@ -6,16 +6,13 @@ use crate::core::eventloop::FRAME; use crate::core::registry::Registry; use anyhow::{anyhow, ensure, Result}; use glam::Mat4; -use lazy_static::lazy_static; use libstardustxr::schemas::input::{InputData, InputDataArgs, InputDataRaw}; use std::ops::Deref; use std::sync::atomic::Ordering; use std::sync::{Arc, Weak}; -lazy_static! { - static ref INPUT_METHOD_REGISTRY: Registry = Default::default(); - static ref INPUT_HANDLER_REGISTRY: Registry = Default::default(); -} +static INPUT_METHOD_REGISTRY: Registry = Registry::new(); +static INPUT_HANDLER_REGISTRY: Registry = Registry::new(); pub trait InputSpecializationTrait { fn distance(&self, space: &Arc, field: &Field) -> f32; diff --git a/src/nodes/item.rs b/src/nodes/item.rs index 690f76c..5438275 100644 --- a/src/nodes/item.rs +++ b/src/nodes/item.rs @@ -29,8 +29,8 @@ lazy_static! { aliased_remote_signals: vec![], aliased_remote_methods: vec![], ui: Default::default(), - items: Default::default(), - acceptors: Default::default(), + items: Registry::new(), + acceptors: Registry::new(), }; static ref ITEM_TYPE_INFO_PANEL: TypeInfo = TypeInfo { type_name: "panel", @@ -55,8 +55,8 @@ lazy_static! { aliased_remote_signals: vec![], aliased_remote_methods: vec![], ui: Default::default(), - items: Default::default(), - acceptors: Default::default(), + items: Registry::new(), + acceptors: Registry::new(), }; } @@ -268,7 +268,7 @@ impl ItemAcceptor { node: Arc::downgrade(node), type_info, field: Mutex::new(field), - accepted: Default::default(), + accepted: Registry::new(), }); if let Some(ui) = type_info.ui.lock().upgrade() { ui.handle_create_acceptor(&acceptor); diff --git a/src/nodes/model.rs b/src/nodes/model.rs index 532d524..775a88b 100644 --- a/src/nodes/model.rs +++ b/src/nodes/model.rs @@ -18,8 +18,8 @@ use stereokit::lifecycle::DrawContext; use stereokit::model::Model as SKModel; use stereokit::StereoKit; +pub static MODEL_REGISTRY: Registry = Registry::new(); lazy_static! { - pub static ref MODEL_REGISTRY: Registry = Default::default(); pub static ref MODELS_TO_DROP: Mutex>> = Default::default(); } diff --git a/src/nodes/root.rs b/src/nodes/root.rs index 2281561..ef269a5 100644 --- a/src/nodes/root.rs +++ b/src/nodes/root.rs @@ -4,14 +4,11 @@ use crate::core::client::Client; use crate::core::registry::Registry; use anyhow::Result; use glam::Mat4; -use lazy_static::lazy_static; use libstardustxr::flex::flexbuffer_from_vector_arguments; use std::sync::atomic::{AtomicBool, Ordering}; use std::sync::Arc; -lazy_static! { - static ref ROOT_REGISTRY: Registry = Default::default(); -} +static ROOT_REGISTRY: Registry = Registry::new(); pub struct Root { node: Arc,