feat(registry): const initialization meaning no necessary lazy_static
This commit is contained in:
@@ -5,11 +5,15 @@ use std::sync::{Arc, Weak};
|
|||||||
|
|
||||||
use core::hash::BuildHasherDefault;
|
use core::hash::BuildHasherDefault;
|
||||||
use dashmap::DashMap;
|
use dashmap::DashMap;
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
use rustc_hash::FxHasher;
|
use rustc_hash::FxHasher;
|
||||||
|
|
||||||
pub struct Registry<T>(DashMap<usize, Weak<T>, BuildHasherDefault<FxHasher>>);
|
pub struct Registry<T>(Lazy<DashMap<usize, Weak<T>, BuildHasherDefault<FxHasher>>>);
|
||||||
|
|
||||||
impl<T> Registry<T> {
|
impl<T> Registry<T> {
|
||||||
|
pub const fn new() -> Self {
|
||||||
|
Registry(Lazy::new(|| DashMap::default()))
|
||||||
|
}
|
||||||
pub fn add(&self, t: T) -> Arc<T> {
|
pub fn add(&self, t: T) -> Arc<T> {
|
||||||
let t_arc = Arc::new(t);
|
let t_arc = Arc::new(t);
|
||||||
self.add_raw(&t_arc);
|
self.add_raw(&t_arc);
|
||||||
@@ -32,9 +36,3 @@ impl<T> Registry<T> {
|
|||||||
self.0.clear();
|
self.0.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<T> Default for Registry<T> {
|
|
||||||
fn default() -> Self {
|
|
||||||
Registry(DashMap::default())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -74,7 +74,7 @@ impl Node {
|
|||||||
destroyable: AtomicBool::from(destroyable),
|
destroyable: AtomicBool::from(destroyable),
|
||||||
|
|
||||||
alias: OnceCell::new(),
|
alias: OnceCell::new(),
|
||||||
aliases: Default::default(),
|
aliases: Registry::new(),
|
||||||
|
|
||||||
spatial: OnceCell::new(),
|
spatial: OnceCell::new(),
|
||||||
field: OnceCell::new(),
|
field: OnceCell::new(),
|
||||||
|
|||||||
@@ -6,16 +6,13 @@ use crate::core::nodelist::LifeLinkedNodeList;
|
|||||||
use crate::core::registry::Registry;
|
use crate::core::registry::Registry;
|
||||||
use anyhow::{anyhow, ensure, Result};
|
use anyhow::{anyhow, ensure, Result};
|
||||||
use glam::{vec3a, Mat4};
|
use glam::{vec3a, Mat4};
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use libstardustxr::flex::flexbuffer_from_vector_arguments;
|
use libstardustxr::flex::flexbuffer_from_vector_arguments;
|
||||||
use libstardustxr::{flex_to_quat, flex_to_vec3};
|
use libstardustxr::{flex_to_quat, flex_to_vec3};
|
||||||
use parking_lot::Mutex;
|
use parking_lot::Mutex;
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
|
|
||||||
lazy_static! {
|
static PULSE_SENDER_REGISTRY: Registry<PulseSender> = Registry::new();
|
||||||
static ref PULSE_SENDER_REGISTRY: Registry<PulseSender> = Default::default();
|
static PULSE_RECEIVER_REGISTRY: Registry<PulseReceiver> = Registry::new();
|
||||||
static ref PULSE_RECEIVER_REGISTRY: Registry<PulseReceiver> = Default::default();
|
|
||||||
}
|
|
||||||
|
|
||||||
fn mask_matches(mask_map_lesser: &Mask, mask_map_greater: &Mask) -> bool {
|
fn mask_matches(mask_map_lesser: &Mask, mask_map_greater: &Mask) -> bool {
|
||||||
(|| -> Result<_> {
|
(|| -> Result<_> {
|
||||||
|
|||||||
@@ -6,16 +6,13 @@ use crate::core::eventloop::FRAME;
|
|||||||
use crate::core::registry::Registry;
|
use crate::core::registry::Registry;
|
||||||
use anyhow::{anyhow, ensure, Result};
|
use anyhow::{anyhow, ensure, Result};
|
||||||
use glam::Mat4;
|
use glam::Mat4;
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use libstardustxr::schemas::input::{InputData, InputDataArgs, InputDataRaw};
|
use libstardustxr::schemas::input::{InputData, InputDataArgs, InputDataRaw};
|
||||||
use std::ops::Deref;
|
use std::ops::Deref;
|
||||||
use std::sync::atomic::Ordering;
|
use std::sync::atomic::Ordering;
|
||||||
use std::sync::{Arc, Weak};
|
use std::sync::{Arc, Weak};
|
||||||
|
|
||||||
lazy_static! {
|
static INPUT_METHOD_REGISTRY: Registry<InputMethod> = Registry::new();
|
||||||
static ref INPUT_METHOD_REGISTRY: Registry<InputMethod> = Default::default();
|
static INPUT_HANDLER_REGISTRY: Registry<InputHandler> = Registry::new();
|
||||||
static ref INPUT_HANDLER_REGISTRY: Registry<InputHandler> = Default::default();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub trait InputSpecializationTrait {
|
pub trait InputSpecializationTrait {
|
||||||
fn distance(&self, space: &Arc<Spatial>, field: &Field) -> f32;
|
fn distance(&self, space: &Arc<Spatial>, field: &Field) -> f32;
|
||||||
|
|||||||
@@ -29,8 +29,8 @@ lazy_static! {
|
|||||||
aliased_remote_signals: vec![],
|
aliased_remote_signals: vec![],
|
||||||
aliased_remote_methods: vec![],
|
aliased_remote_methods: vec![],
|
||||||
ui: Default::default(),
|
ui: Default::default(),
|
||||||
items: Default::default(),
|
items: Registry::new(),
|
||||||
acceptors: Default::default(),
|
acceptors: Registry::new(),
|
||||||
};
|
};
|
||||||
static ref ITEM_TYPE_INFO_PANEL: TypeInfo = TypeInfo {
|
static ref ITEM_TYPE_INFO_PANEL: TypeInfo = TypeInfo {
|
||||||
type_name: "panel",
|
type_name: "panel",
|
||||||
@@ -55,8 +55,8 @@ lazy_static! {
|
|||||||
aliased_remote_signals: vec![],
|
aliased_remote_signals: vec![],
|
||||||
aliased_remote_methods: vec![],
|
aliased_remote_methods: vec![],
|
||||||
ui: Default::default(),
|
ui: Default::default(),
|
||||||
items: Default::default(),
|
items: Registry::new(),
|
||||||
acceptors: Default::default(),
|
acceptors: Registry::new(),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -268,7 +268,7 @@ impl ItemAcceptor {
|
|||||||
node: Arc::downgrade(node),
|
node: Arc::downgrade(node),
|
||||||
type_info,
|
type_info,
|
||||||
field: Mutex::new(field),
|
field: Mutex::new(field),
|
||||||
accepted: Default::default(),
|
accepted: Registry::new(),
|
||||||
});
|
});
|
||||||
if let Some(ui) = type_info.ui.lock().upgrade() {
|
if let Some(ui) = type_info.ui.lock().upgrade() {
|
||||||
ui.handle_create_acceptor(&acceptor);
|
ui.handle_create_acceptor(&acceptor);
|
||||||
|
|||||||
@@ -18,8 +18,8 @@ use stereokit::lifecycle::DrawContext;
|
|||||||
use stereokit::model::Model as SKModel;
|
use stereokit::model::Model as SKModel;
|
||||||
use stereokit::StereoKit;
|
use stereokit::StereoKit;
|
||||||
|
|
||||||
|
pub static MODEL_REGISTRY: Registry<Model> = Registry::new();
|
||||||
lazy_static! {
|
lazy_static! {
|
||||||
pub static ref MODEL_REGISTRY: Registry<Model> = Default::default();
|
|
||||||
pub static ref MODELS_TO_DROP: Mutex<Vec<SendWrapper<SKModel>>> = Default::default();
|
pub static ref MODELS_TO_DROP: Mutex<Vec<SendWrapper<SKModel>>> = Default::default();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,14 +4,11 @@ use crate::core::client::Client;
|
|||||||
use crate::core::registry::Registry;
|
use crate::core::registry::Registry;
|
||||||
use anyhow::Result;
|
use anyhow::Result;
|
||||||
use glam::Mat4;
|
use glam::Mat4;
|
||||||
use lazy_static::lazy_static;
|
|
||||||
use libstardustxr::flex::flexbuffer_from_vector_arguments;
|
use libstardustxr::flex::flexbuffer_from_vector_arguments;
|
||||||
use std::sync::atomic::{AtomicBool, Ordering};
|
use std::sync::atomic::{AtomicBool, Ordering};
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
|
||||||
lazy_static! {
|
static ROOT_REGISTRY: Registry<Root> = Registry::new();
|
||||||
static ref ROOT_REGISTRY: Registry<Root> = Default::default();
|
|
||||||
}
|
|
||||||
|
|
||||||
pub struct Root {
|
pub struct Root {
|
||||||
node: Arc<Node>,
|
node: Arc<Node>,
|
||||||
|
|||||||
Reference in New Issue
Block a user