extern crate phf_mut;
use phf_mut::{PerfectHash, Map};
struct Pairs {
n: usize,
}
impl Pairs {
pub fn new(n: usize) -> Self {
Pairs { n: n }
}
fn sort((u, v): (usize, usize)) -> (usize, usize) {
if u > v {
(v, u)
} else {
(u, v)
}
}
fn size_when(n: usize) -> usize {
(n + 1) * n / 2
}
}
impl PerfectHash for Pairs {
type K = (usize, usize);
fn hash(&self, k: Self::K) -> usize {
let (a, b) = Self::sort(k);
a + Self::size_when(b)
}
fn size(&self) -> usize {
Self::size_when(self.n)
}
}
fn main() {
let mut mymap = Map::new(Pairs::new(10));
mymap.insert((3, 7), String::from("Hello"));
mymap[(7, 3)].push(' ');
mymap.insert((4, 3), String::from("lovely"));
mymap.insert((2, 9), String::from("World!"));
print!("{}", mymap.get((3, 7))); print!("{}", mymap.get((2, 2))); print!("{}", mymap.get((2, 9))); print!("{}", mymap.get((7, 4))); println!();
}