From 9cc23745cf077321cb0da791eac7de6c698b7533 Mon Sep 17 00:00:00 2001 From: Anders Olsson Date: Fri, 2 Nov 2018 08:27:50 +0100 Subject: [PATCH] Use hashbrown. Everything was faster, except contains. Not that great that it was contains that was slower, but I think it will be worth it. --- Cargo.toml | 2 +- src/hasher.rs | 32 -------------------------------- src/lib.rs | 16 ++++++---------- 3 files changed, 7 insertions(+), 43 deletions(-) delete mode 100644 src/hasher.rs diff --git a/Cargo.toml b/Cargo.toml index 62addf8..1083927 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -4,7 +4,7 @@ version = "0.1.0" authors = ["logaritmisk "] [dependencies] -ordermap = "0.4" +hashbrown = "0.1" rayon = "1.0" serde = "1.0" unreachable = "1.0" diff --git a/src/hasher.rs b/src/hasher.rs deleted file mode 100644 index cbba651..0000000 --- a/src/hasher.rs +++ /dev/null @@ -1,32 +0,0 @@ -use std::default::Default; -use std::hash::{BuildHasherDefault, Hasher}; - -use unreachable; - -pub struct BitHasher(u64); - -impl Default for BitHasher { - #[inline] - fn default() -> BitHasher { - BitHasher(0) - } -} - -impl Hasher for BitHasher { - #[inline] - fn finish(&self) -> u64 { - self.0 - } - - #[inline] - fn write(&mut self, _: &[u8]) { - unsafe { unreachable::unreachable() }; - } - - #[inline] - fn write_u64(&mut self, i: u64) { - *self = BitHasher(i); - } -} - -pub type BitBuildHasher = BuildHasherDefault; diff --git a/src/lib.rs b/src/lib.rs index b011330..4b09cbe 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -1,26 +1,22 @@ +extern crate hashbrown; extern crate rayon; extern crate serde; extern crate unreachable; -use std::collections::{HashMap, LinkedList}; +use std::collections::LinkedList; use std::default::Default; use std::fmt; use std::iter::{FromIterator, IntoIterator, Iterator}; use std::ops; +use hashbrown::HashMap; use rayon::iter::{FromParallelIterator, IntoParallelIterator, ParallelExtend, ParallelIterator}; use serde::de::{SeqAccess, Visitor}; use serde::ser::SerializeSeq; use serde::{Deserialize, Deserializer, Serialize, Serializer}; -mod hasher; - -use hasher::BitBuildHasher; - const BITS: u64 = 64; -pub type BitHashMap = HashMap; - #[inline] fn block_bit(x: u64, d: u64) -> (u64, u64) { (x / d, x % d) @@ -28,7 +24,7 @@ fn block_bit(x: u64, d: u64) -> (u64, u64) { #[derive(PartialEq, Eq, Clone)] pub struct BitSet { - blocks: HashMap, + blocks: HashMap, nbits: usize, } @@ -285,14 +281,14 @@ impl<'a> ops::Sub<&'a BitSet> for &'a BitSet { } pub struct Iter<'a> { - iter: std::collections::hash_map::Iter<'a, u64, u64>, + iter: hashbrown::hash_map::Iter<'a, u64, u64>, block: u64, bits: u64, bit: u64, } pub struct IntoIter { - iter: std::collections::hash_map::IntoIter, + iter: hashbrown::hash_map::IntoIter, block: u64, bits: u64, bit: u64,