* Remove AHashExt There is little benefit of Hash*::new() over Hash*::default(), but it does require more code that needs to be duplicated for every Hash* in bevy_utils. It may also slightly increase compile times. * Add StableHash* to bevy_utils * Use StableHashMap instead of HashMap + BTreeSet for diagnostics This is a significant reduction in the release mode compile times of bevy_diagnostics ``` Benchmark #1: touch crates/bevy_diagnostic/src/lib.rs && cargo build --release -p bevy_diagnostic -j1 Time (mean ± σ): 3.645 s ± 0.009 s [User: 3.551 s, System: 0.094 s] Range (min … max): 3.632 s … 3.658 s 20 runs ``` ``` Benchmark #1: touch crates/bevy_diagnostic/src/lib.rs && cargo build --release -p bevy_diagnostic -j1 Time (mean ± σ): 2.938 s ± 0.012 s [User: 2.850 s, System: 0.090 s] Range (min … max): 2.919 s … 2.969 s 20 runs ```
36 lines
646 B
Rust
36 lines
646 B
Rust
use bevy_utils::HashMap;
|
|
use std::hash::Hash;
|
|
|
|
#[derive(Debug)]
|
|
pub struct Axis<T> {
|
|
axis_data: HashMap<T, f32>,
|
|
}
|
|
|
|
impl<T> Default for Axis<T>
|
|
where
|
|
T: Copy + Eq + Hash,
|
|
{
|
|
fn default() -> Self {
|
|
Axis {
|
|
axis_data: HashMap::default(),
|
|
}
|
|
}
|
|
}
|
|
|
|
impl<T> Axis<T>
|
|
where
|
|
T: Copy + Eq + Hash,
|
|
{
|
|
pub fn set(&mut self, axis: T, value: f32) -> Option<f32> {
|
|
self.axis_data.insert(axis, value)
|
|
}
|
|
|
|
pub fn get(&self, axis: T) -> Option<f32> {
|
|
self.axis_data.get(&axis).copied()
|
|
}
|
|
|
|
pub fn remove(&mut self, axis: T) -> Option<f32> {
|
|
self.axis_data.remove(&axis)
|
|
}
|
|
}
|