55//spell-checker:ignore TAOCP indegree fadvise FADV
66//spell-checker:ignore (libs) interner uclibc
77use clap:: { Arg , ArgAction , Command } ;
8+ use rustc_hash:: FxHashMap ;
9+ use std:: collections:: VecDeque ;
810use std:: collections:: hash_map:: Entry ;
9- use std:: collections:: { HashMap , VecDeque } ;
1011use std:: ffi:: OsString ;
1112use std:: fs:: File ;
1213use std:: io:: { self , BufRead , BufReader } ;
@@ -19,7 +20,7 @@ use uucore::{format_usage, show, translate};
1920
2021// short types for switching interning behavior on the fly.
2122type Sym = string_interner:: symbol:: SymbolUsize ;
22- type Interner = StringInterner < BucketBackend < Sym > > ;
23+ type Interner = StringInterner < BucketBackend < Sym > , rustc_hash :: FxBuildHasher > ;
2324
2425mod options {
2526 pub const FILE : & str = "file" ;
@@ -224,18 +225,18 @@ impl Node {
224225
225226struct Graph {
226227 name_sym : Sym ,
227- nodes : HashMap < Sym , Node > ,
228+ nodes : FxHashMap < Sym , Node > ,
228229 interner : Interner ,
229230}
230231
231232impl Graph {
232233 fn new ( name : String ) -> Self {
233- let mut interner = Interner :: new ( ) ;
234+ let mut interner = Interner :: with_hasher ( rustc_hash :: FxBuildHasher ) ;
234235 let name_sym = interner. get_or_intern ( name) ;
235236 Self {
236237 name_sym,
237238 interner,
238- nodes : HashMap :: default ( ) ,
239+ nodes : FxHashMap :: default ( ) ,
239240 }
240241 }
241242
@@ -357,7 +358,7 @@ impl Graph {
357358 let mut nodes: Vec < _ > = self . nodes . keys ( ) . copied ( ) . collect ( ) ;
358359 nodes. sort_unstable_by ( |a, b| self . get_node_name ( * a) . cmp ( self . get_node_name ( * b) ) ) ;
359360
360- let mut visited = HashMap :: new ( ) ;
361+ let mut visited = FxHashMap :: default ( ) ;
361362 let mut stack = Vec :: with_capacity ( self . nodes . len ( ) ) ;
362363 for & node in & nodes {
363364 if self . dfs ( node, & mut visited, & mut stack) {
@@ -376,7 +377,7 @@ impl Graph {
376377 fn dfs < ' a > (
377378 & ' a self ,
378379 node : Sym ,
379- visited : & mut HashMap < Sym , VisitedState > ,
380+ visited : & mut FxHashMap < Sym , VisitedState > ,
380381 stack : & mut Vec < ( Sym , & ' a [ Sym ] ) > ,
381382 ) -> bool {
382383 stack. push ( (
0 commit comments