summaryrefslogtreecommitdiff
path: root/ecs/src/sole.rs
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2026-01-18 17:46:02 +0100
committerHampusM <hampus@hampusmat.com>2026-01-18 17:46:02 +0100
commitd0cac9159e6ddfe5dbb9b32036e7258f6e51d47e (patch)
tree0e11db40097464586911aba27e2ff71222451732 /ecs/src/sole.rs
parentdfb6b4e45065c618fdd2df7424fd66c439cd1841 (diff)
refactor(ecs): remove Actions & Sole weak ref structsHEADmaster
Diffstat (limited to 'ecs/src/sole.rs')
-rw-r--r--ecs/src/sole.rs68
1 files changed, 3 insertions, 65 deletions
diff --git a/ecs/src/sole.rs b/ecs/src/sole.rs
index 7cfcc24..82e5e0f 100644
--- a/ecs/src/sole.rs
+++ b/ecs/src/sole.rs
@@ -1,12 +1,12 @@
-use std::any::{type_name, Any};
+use std::any::{Any, type_name};
use std::fmt::Debug;
use std::marker::PhantomData;
use std::ops::{Deref, DerefMut};
-use std::sync::{Arc, Weak};
+use std::sync::Arc;
+use crate::World;
use crate::lock::{Lock, WriteGuard};
use crate::system::{Metadata as SystemMetadata, Param as SystemParam};
-use crate::World;
/// A type which has a single instance and is shared globally.
pub trait Sole: Any
@@ -44,7 +44,6 @@ impl Debug for dyn Sole
pub struct Single<'world, SoleT: Sole>
{
sole: WriteGuard<'world, Box<dyn Sole>>,
- sole_weak: Weak<Lock<Box<dyn Sole>>>,
_ph: PhantomData<SoleT>,
}
@@ -52,18 +51,6 @@ impl<'world, SoleT> Single<'world, SoleT>
where
SoleT: Sole,
{
- /// Returns a struct which holds a weak reference to the [`World`] that `Single`
- /// references and that can be used to aquire a new `Single` if the referenced
- /// [`World`] is still alive.
- #[must_use]
- pub fn to_weak_ref(&self) -> SingleWeakRef<SoleT>
- {
- SingleWeakRef {
- sole: self.sole_weak.clone(),
- _ph: PhantomData,
- }
- }
-
pub(crate) fn new(sole: &'world Arc<Lock<Box<dyn Sole>>>) -> Self
{
Self {
@@ -73,7 +60,6 @@ where
type_name::<SoleT>()
)
}),
- sole_weak: Arc::downgrade(sole),
_ph: PhantomData,
}
}
@@ -116,51 +102,3 @@ where
self.sole.downcast_mut().unwrap()
}
}
-
-#[derive(Debug, Clone)]
-pub struct SingleWeakRef<SoleT>
-where
- SoleT: Sole,
-{
- sole: Weak<Lock<Box<dyn Sole>>>,
- _ph: PhantomData<SoleT>,
-}
-
-impl<SoleT> SingleWeakRef<SoleT>
-where
- SoleT: Sole,
-{
- /// Returns a struct which can be used to retrieve a [`Single`].
- ///
- /// Returns [`None`] if the referenced [`World`] has been dropped.
- #[must_use]
- pub fn access(&self) -> Option<SingleRef<'_, SoleT>>
- {
- Some(SingleRef {
- sole: self.sole.upgrade()?,
- _pd: PhantomData,
- })
- }
-}
-
-/// Intermediate between [`Single`] and [`SingleWeakRef`]. Contains a strong reference to
-/// a world which is not allowed direct access to.
-#[derive(Debug, Clone)]
-pub struct SingleRef<'weak_ref, SoleT>
-where
- SoleT: Sole,
-{
- sole: Arc<Lock<Box<dyn Sole>>>,
- _pd: PhantomData<&'weak_ref SoleT>,
-}
-
-impl<SoleT> SingleRef<'_, SoleT>
-where
- SoleT: Sole,
-{
- #[must_use]
- pub fn to_single(&self) -> Single<'_, SoleT>
- {
- Single::new(&self.sole)
- }
-}