From 44cf7798bd69cc92f4d70f27c58eeb268b994552 Mon Sep 17 00:00:00 2001 From: "Sergey \"Shnatsel\" Davidoff" Date: Fri, 26 May 2017 18:49:39 +0300 Subject: [PATCH] tr: use FnvHashMap instead of default HashMap backed by SipHasher. FnvHashMap is much faster for small inputs like intergers, and we literally have a hashmap with chars as keys --- src/tr/Cargo.toml | 1 + src/tr/tr.rs | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/tr/Cargo.toml b/src/tr/Cargo.toml index b089c8cc6..49f3f891b 100644 --- a/src/tr/Cargo.toml +++ b/src/tr/Cargo.toml @@ -10,6 +10,7 @@ path = "tr.rs" [dependencies] getopts = "*" bit-set = "*" +fnv = "*" [dependencies.uucore] path = "../uucore" diff --git a/src/tr/tr.rs b/src/tr/tr.rs index 00ccadf09..bc904ea57 100644 --- a/src/tr/tr.rs +++ b/src/tr/tr.rs @@ -14,6 +14,7 @@ extern crate bit_set; extern crate getopts; +extern crate fnv; #[macro_use] extern crate uucore; @@ -21,7 +22,7 @@ extern crate uucore; use bit_set::BitSet; use getopts::Options; use std::io::{stdin, stdout, BufRead, BufWriter, Write}; -use std::collections::HashMap; +use fnv::FnvHashMap; use expand::ExpandSet; @@ -65,8 +66,7 @@ fn delete(set: ExpandSet, complement: bool) { } fn tr<'a>(set1: ExpandSet<'a>, mut set2: ExpandSet<'a>) { - //let mut map = VecMap::new(); - let mut map = HashMap::new(); + let mut map = FnvHashMap::default(); let stdin = stdin(); let mut locked_stdin = stdin.lock(); let mut buffered_stdout = BufWriter::new(stdout());