Skip to content

Commit 5ba108d

Browse files
committed
switch from HashMap to FnvHashMap
1 parent 7a70eb0 commit 5ba108d

File tree

3 files changed

+21
-12
lines changed

3 files changed

+21
-12
lines changed

Cargo.lock

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

+4-3
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,16 @@ default-run = "kirby"
1111
argparse = "0.2.2"
1212
aws_lambda = { git = "https://github.com/srijs/rust-aws-lambda" }
1313
flate2 = { version = "1.0", features = ["zlib"], default-features = false }
14+
fnv = "1.0.6"
1415
futures = "0.1.24"
1516
lazy_static = "1.1.0"
1617
log = "0.4.5"
1718
nom = "4.0"
1819
rayon = "1.0.2"
1920
regex = "1"
21+
rusoto_core = { version="0.34.0", default_features=false, features=["rustls"] }
22+
rusoto_s3 = { version="0.34.0", default_features=false, features=["rustls"] }
2023
serde = "1.0"
2124
serde_derive = "1.0"
2225
serde_json = "1.0"
23-
time = "0.1"
24-
rusoto_core = { version="0.34.0", default_features=false, features=["rustls"] }
25-
rusoto_s3 = { version="0.34.0", default_features=false, features=["rustls"] }
26+
time = "0.1"

src/lib.rs

+16-9
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ extern crate lazy_static;
77
extern crate serde_derive;
88

99
extern crate flate2;
10+
extern crate fnv;
1011
extern crate nom;
1112
extern crate regex;
1213
extern crate serde;
1314
extern crate serde_json;
1415
extern crate test;
1516

16-
use std::collections::HashMap;
17+
use fnv::FnvHashMap;
1718
use std::io::*;
1819

1920
mod file;
@@ -27,9 +28,9 @@ const METADATA_PATHS: [&str; 4] = [
2728
"/versions",
2829
];
2930

30-
type ValueMap = HashMap<String, i32>;
31-
type NameMap = HashMap<String, ValueMap>;
32-
type TimeMap = HashMap<String, NameMap>;
31+
type ValueMap = FnvHashMap<String, i32>;
32+
type NameMap = FnvHashMap<String, ValueMap>;
33+
type TimeMap = FnvHashMap<String, NameMap>;
3334

3435
pub struct Options {
3536
pub verbose: bool,
@@ -40,9 +41,13 @@ pub struct Options {
4041
pub fn combine_stats(left: &TimeMap, right: &TimeMap) -> TimeMap {
4142
let mut left_times = left.clone();
4243
for (time, names) in right {
43-
let left_names = left_times.entry(time.to_string()).or_insert(HashMap::new());
44+
let left_names = left_times
45+
.entry(time.to_string())
46+
.or_insert(FnvHashMap::default());
4447
for (name, versions) in names {
45-
let left_versions = left_names.entry(name.to_string()).or_insert(HashMap::new());
48+
let left_versions = left_names
49+
.entry(name.to_string())
50+
.or_insert(FnvHashMap::default());
4651
for (version, count) in versions {
4752
let left_count = left_versions.entry(version.to_string()).or_insert(0);
4853
*left_count += count;
@@ -69,7 +74,9 @@ fn duplicate_request(r: &request::Request) -> bool {
6974
}
7075

7176
fn increment(counters: &mut NameMap, name: &str, value: &str) {
72-
let map = counters.entry(name.to_string()).or_insert(HashMap::new());
77+
let map = counters
78+
.entry(name.to_string())
79+
.or_insert(FnvHashMap::default());
7380
let count = map.entry(String::from(value)).or_insert(0);
7481
*count += 1;
7582
}
@@ -99,7 +106,7 @@ pub fn count_line(times: &mut TimeMap, line: String) {
99106
}
100107

101108
let date = r.timestamp.get(..10).unwrap().to_string();
102-
let counters = times.entry(date).or_insert(HashMap::new());
109+
let counters = times.entry(date).or_insert(FnvHashMap::default());
103110

104111
increment(counters, "tls_cipher", r.tls_cipher.as_ref());
105112
increment(counters, "server_region", r.server_region.as_ref());
@@ -115,7 +122,7 @@ pub fn count_line(times: &mut TimeMap, line: String) {
115122
}
116123

117124
pub fn stream_stats(stream: Box<BufRead>, opts: &Options) -> TimeMap {
118-
let mut times = TimeMap::new();
125+
let mut times = TimeMap::default();
119126
let mut lineno = 0;
120127

121128
stream.lines().for_each(|line| {

0 commit comments

Comments
 (0)