--- a/rust/hwphysics/src/common.rs Wed Aug 28 22:53:40 2019 +0300
+++ b/rust/hwphysics/src/common.rs Wed Aug 28 23:06:34 2019 +0300
@@ -6,7 +6,6 @@
};
pub type GearId = NonZeroU16;
-pub trait GearData {}
#[derive(PartialEq, Eq, PartialOrd, Ord, Clone, Copy, Debug)]
#[repr(transparent)]
@@ -37,16 +36,6 @@
}
}
-pub trait GearDataProcessor<T: GearData> {
- fn add(&mut self, gear_id: GearId, gear_data: T);
- fn remove(&mut self, gear_id: GearId);
- fn get(&mut self, gear_id: GearId) -> Option<T>;
-}
-
-pub trait GearDataAggregator<T: GearData> {
- fn find_processor(&mut self) -> &mut GearDataProcessor<T>;
-}
-
pub struct GearAllocator {
max_id: u16,
free_ids: BinaryHeap<GearId>,
@@ -73,91 +62,3 @@
self.free_ids.push(gear_id)
}
}
-
-#[derive(Clone, Copy, Default)]
-pub struct LookupEntry<T> {
- index: Option<NonZeroU16>,
- value: T,
-}
-
-impl<T> LookupEntry<T> {
- #[inline]
- pub fn index(&self) -> u16 {
- self.index.map(|i| i.get()).unwrap_or(0) - 1
- }
-
- #[inline]
- pub fn set_index(&mut self, index: u16) {
- self.index = unsafe { Some(NonZeroU16::new_unchecked(index.saturating_add(1))) };
- }
-
- #[inline]
- pub fn value(&self) -> &T {
- &self.value
- }
-
- #[inline]
- pub fn value_mut(&mut self) -> &mut T {
- &mut self.value
- }
-
- #[inline]
- pub fn set_value(&mut self, value: T) {
- self.value = value;
- }
-}
-
-pub struct GearDataLookup<T> {
- lookup: Box<[LookupEntry<T>]>,
-}
-
-impl<T: Default + Copy> GearDataLookup<T> {
- pub fn new() -> Self {
- Self {
- lookup: vec![LookupEntry::default(); u16::max_value() as usize].into_boxed_slice(),
- }
- }
-}
-
-impl<T> GearDataLookup<T> {
- pub fn add(&mut self, gear_id: GearId, index: u16, value: T) {
- // All possible Gear IDs are valid indices
- let entry = unsafe { self.lookup.get_unchecked_mut(gear_id.get() as usize - 1) };
- entry.set_index(index);
- entry.set_value(value);
- }
-
- pub fn get(&self, gear_id: GearId) -> Option<&LookupEntry<T>> {
- // All possible Gear IDs are valid indices
- let entry = unsafe { self.lookup.get_unchecked(gear_id.get() as usize - 1) };
- if let Some(index) = entry.index {
- Some(entry)
- } else {
- None
- }
- }
-
- pub fn get_mut(&mut self, gear_id: GearId) -> Option<&mut LookupEntry<T>> {
- // All possible Gear IDs are valid indices
- let entry = unsafe { self.lookup.get_unchecked_mut(gear_id.get() as usize - 1) };
- if let Some(index) = entry.index {
- Some(entry)
- } else {
- None
- }
- }
-}
-
-impl<T> Index<GearId> for GearDataLookup<T> {
- type Output = LookupEntry<T>;
-
- fn index(&self, index: GearId) -> &Self::Output {
- self.get(index).unwrap()
- }
-}
-
-impl<T> IndexMut<GearId> for GearDataLookup<T> {
- fn index_mut(&mut self, index: GearId) -> &mut Self::Output {
- self.get_mut(index).unwrap()
- }
-}