diff options
author | HampusM <hampus@hampusmat.com> | 2024-08-16 19:30:06 +0200 |
---|---|---|
committer | HampusM <hampus@hampusmat.com> | 2024-08-16 19:30:06 +0200 |
commit | 77e0e30f6faedadae3ff57f2b3abb0548a6a27f1 (patch) | |
tree | 5c85b4e0ca0143fec487641152eee3ebe8dfd8af /ecs/src/util.rs | |
parent | 7da4b6acf1c08a87a709698d06a4237b38d0aa8a (diff) |
fix(ecs): prevent nested queries causing panic
Diffstat (limited to 'ecs/src/util.rs')
-rw-r--r-- | ecs/src/util.rs | 50 |
1 files changed, 0 insertions, 50 deletions
diff --git a/ecs/src/util.rs b/ecs/src/util.rs index 5ec21c7..f4f8632 100644 --- a/ecs/src/util.rs +++ b/ecs/src/util.rs @@ -1,6 +1,3 @@ -use std::cell::Ref; -use std::ops::{Deref, DerefMut}; - pub trait Sortable { type Item; @@ -49,50 +46,3 @@ impl<Item> Sortable for Vec<Item> self.sort_by_key(func) } } - -#[derive(Debug)] -pub struct RefCellRefMap<'a, Value: 'a, MappedValue: 'a> -{ - mapped_value: MappedValue, - _refcell_ref: Ref<'a, Value>, -} - -impl<'a, Value: 'a, MappedValue: 'a> RefCellRefMap<'a, Value, MappedValue> -{ - pub fn new( - refcell_ref: Ref<'a, Value>, - map_fn: impl Fn(&'a Value) -> MappedValue, - ) -> Self - { - // Convert the lifetime to 'static. This is necessary to make the compiler not - // complain about refcell_ref being moved - // - // SAFETY: This is fine since we pass it to map_fn with the original lifetime 'a - let val_ref = unsafe { &*(&*refcell_ref as *const Value) }; - - let mapped_value = map_fn(val_ref); - - Self { - mapped_value, - _refcell_ref: refcell_ref, - } - } -} - -impl<'a, Value: 'a, MappedValue: 'a> Deref for RefCellRefMap<'a, Value, MappedValue> -{ - type Target = MappedValue; - - fn deref(&self) -> &Self::Target - { - &self.mapped_value - } -} - -impl<'a, Value: 'a, MappedValue: 'a> DerefMut for RefCellRefMap<'a, Value, MappedValue> -{ - fn deref_mut(&mut self) -> &mut Self::Target - { - &mut self.mapped_value - } -} |