@@ -7,13 +7,14 @@ extern crate lazy_static;
7
7
extern crate serde_derive;
8
8
9
9
extern crate flate2;
10
+ extern crate fnv;
10
11
extern crate nom;
11
12
extern crate regex;
12
13
extern crate serde;
13
14
extern crate serde_json;
14
15
extern crate test;
15
16
16
- use std :: collections :: HashMap ;
17
+ use fnv :: FnvHashMap ;
17
18
use std:: io:: * ;
18
19
19
20
mod file;
@@ -27,9 +28,9 @@ const METADATA_PATHS: [&str; 4] = [
27
28
"/versions" ,
28
29
] ;
29
30
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 > ;
33
34
34
35
pub struct Options {
35
36
pub verbose : bool ,
@@ -40,9 +41,13 @@ pub struct Options {
40
41
pub fn combine_stats ( left : & TimeMap , right : & TimeMap ) -> TimeMap {
41
42
let mut left_times = left. clone ( ) ;
42
43
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 ( ) ) ;
44
47
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 ( ) ) ;
46
51
for ( version, count) in versions {
47
52
let left_count = left_versions. entry ( version. to_string ( ) ) . or_insert ( 0 ) ;
48
53
* left_count += count;
@@ -69,7 +74,9 @@ fn duplicate_request(r: &request::Request) -> bool {
69
74
}
70
75
71
76
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 ( ) ) ;
73
80
let count = map. entry ( String :: from ( value) ) . or_insert ( 0 ) ;
74
81
* count += 1 ;
75
82
}
@@ -99,7 +106,7 @@ pub fn count_line(times: &mut TimeMap, line: String) {
99
106
}
100
107
101
108
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 ( ) ) ;
103
110
104
111
increment ( counters, "tls_cipher" , r. tls_cipher . as_ref ( ) ) ;
105
112
increment ( counters, "server_region" , r. server_region . as_ref ( ) ) ;
@@ -115,7 +122,7 @@ pub fn count_line(times: &mut TimeMap, line: String) {
115
122
}
116
123
117
124
pub fn stream_stats ( stream : Box < BufRead > , opts : & Options ) -> TimeMap {
118
- let mut times = TimeMap :: new ( ) ;
125
+ let mut times = TimeMap :: default ( ) ;
119
126
let mut lineno = 0 ;
120
127
121
128
stream. lines ( ) . for_each ( |line| {
0 commit comments