Use and Index struct instead of str and String for player id
This commit is contained in:
45
src/lib.rs
45
src/lib.rs
@@ -1,5 +1,8 @@
|
||||
use std::borrow::{Borrow, ToOwned};
|
||||
use std::cmp::Reverse;
|
||||
use std::collections::HashMap;
|
||||
use std::f64::consts::{FRAC_1_SQRT_2, FRAC_2_SQRT_PI, SQRT_2};
|
||||
use std::hash::Hash;
|
||||
|
||||
mod agent;
|
||||
#[cfg(feature = "approx")]
|
||||
@@ -27,19 +30,55 @@ pub const ITERATIONS: usize = 30;
|
||||
|
||||
const SQRT_TAU: f64 = 2.5066282746310002;
|
||||
|
||||
const N01: Gaussian = Gaussian {
|
||||
pub const N01: Gaussian = Gaussian {
|
||||
mu: 0.0,
|
||||
sigma: 1.0,
|
||||
};
|
||||
pub(crate) const N00: Gaussian = Gaussian {
|
||||
pub const N00: Gaussian = Gaussian {
|
||||
mu: 0.0,
|
||||
sigma: 0.0,
|
||||
};
|
||||
pub(crate) const N_INF: Gaussian = Gaussian {
|
||||
pub const N_INF: Gaussian = Gaussian {
|
||||
mu: 0.0,
|
||||
sigma: f64::INFINITY,
|
||||
};
|
||||
|
||||
#[derive(Copy, Clone, Default, PartialEq, PartialOrd, Eq, Ord, Hash, Debug)]
|
||||
pub struct Index(usize);
|
||||
|
||||
impl From<usize> for Index {
|
||||
fn from(ix: usize) -> Self {
|
||||
Self(ix)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct IndexMap<K>(HashMap<K, Index>);
|
||||
|
||||
impl<K> IndexMap<K>
|
||||
where
|
||||
K: Eq + Hash,
|
||||
{
|
||||
pub fn new() -> Self {
|
||||
Self(HashMap::new())
|
||||
}
|
||||
|
||||
pub fn get_or_create<Q: ?Sized>(&mut self, k: &Q) -> Index
|
||||
where
|
||||
K: Borrow<Q>,
|
||||
Q: Hash + Eq + ToOwned<Owned = K>,
|
||||
{
|
||||
if let Some(idx) = self.0.get(k) {
|
||||
*idx
|
||||
} else {
|
||||
let idx = Index::from(self.0.len());
|
||||
|
||||
self.0.insert(k.to_owned(), idx);
|
||||
|
||||
idx
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn erfc(x: f64) -> f64 {
|
||||
let z = x.abs();
|
||||
let t = 1.0 / (1.0 + z / 2.0);
|
||||
|
||||
Reference in New Issue
Block a user