diff options
-rw-r--r-- | ecs/src/query.rs | 77 |
1 files changed, 1 insertions, 76 deletions
diff --git a/ecs/src/query.rs b/ecs/src/query.rs index 79ad292..6b06e9a 100644 --- a/ecs/src/query.rs +++ b/ecs/src/query.rs @@ -2,7 +2,7 @@ use std::any::Any; use std::collections::HashSet; use std::iter::{Filter, Flatten, Map}; use std::marker::PhantomData; -use std::sync::{Arc, Weak}; +use std::sync::Arc; use crate::component::storage::{ Archetype, @@ -31,7 +31,6 @@ where Comps: ComponentSequence, { component_storage: ReadGuard<'world, ComponentStorage>, - component_storage_lock: Weak<Lock<ComponentStorage>>, _pd: PhantomData<(Comps, OptionsT)>, } @@ -61,23 +60,12 @@ where } } - /// Returns a weak reference query to the same components. - #[must_use] - pub fn to_weak_ref(&self) -> WeakRef<Comps, OptionsT> - { - WeakRef { - component_storage: self.component_storage_lock.clone(), - comps_pd: PhantomData, - } - } - pub(crate) fn new(component_storage: &'world Arc<Lock<ComponentStorage>>) -> Self { Self { component_storage: component_storage .read_nonblock() .expect("Failed to acquire read-only component storage lock"), - component_storage_lock: Arc::downgrade(component_storage), _pd: PhantomData, } } @@ -167,69 +155,6 @@ where } } -/// A entity query containing a weak reference to the world. -#[derive(Debug)] -pub struct WeakRef<Comps, OptionsT> -where - Comps: ComponentSequence, -{ - component_storage: Weak<Lock<ComponentStorage>>, - comps_pd: PhantomData<(Comps, OptionsT)>, -} - -impl<Comps, OptionsT> WeakRef<Comps, OptionsT> -where - Comps: ComponentSequence, -{ - /// Returns a struct which can be used to retrieve a [`Query`]. - /// - /// Returns [`None`] if the [`World`] has been dropped. - #[must_use] - pub fn access(&self) -> Option<Ref<'_, Comps, OptionsT>> - { - Some(Ref { - component_storage: self.component_storage.upgrade()?, - _pd: PhantomData, - }) - } -} - -impl<Comps, OptionsT> Clone for WeakRef<Comps, OptionsT> -where - Comps: ComponentSequence, -{ - fn clone(&self) -> Self - { - Self { - component_storage: self.component_storage.clone(), - comps_pd: PhantomData, - } - } -} - -/// Intermediate between [`Query`] and [`WeakRefQuery`]. Contains a strong reference to -/// the world which is not allowed direct access to. -#[derive(Debug, Clone)] -pub struct Ref<'weak_ref, Comps, OptionsT> -where - Comps: ComponentSequence, -{ - component_storage: Arc<Lock<ComponentStorage>>, - _pd: PhantomData<(&'weak_ref Comps, OptionsT)>, -} - -impl<'weak_ref, Comps, OptionsT> Ref<'weak_ref, Comps, OptionsT> -where - Comps: ComponentSequence, - OptionsT: Options, -{ - #[must_use] - pub fn to_query(&self) -> Query<'_, Comps, OptionsT> - { - Query::new(&self.component_storage) - } -} - type ComponentIterMapFn = for<'a> fn(&'a Archetype) -> &'a [Vec<EntityComponent>]; type ComponentIterFilterFn = for<'a, 'b> fn(&'a &'b Vec<EntityComponent>) -> bool; |