smallwrite_build: make failure_map unordered

This commit is contained in:
Justin Viiret 2017-08-10 11:06:13 +10:00 committed by Matthew Barr
parent 14333f5b0b
commit d25740b615

View File

@ -395,7 +395,7 @@ namespace {
*/ */
struct ACVisitor : public boost::default_bfs_visitor { struct ACVisitor : public boost::default_bfs_visitor {
ACVisitor(LitTrie &trie_in, ACVisitor(LitTrie &trie_in,
map<LitTrieVertex, LitTrieVertex> &failure_map_in, unordered_map<LitTrieVertex, LitTrieVertex> &failure_map_in,
vector<LitTrieVertex> &ordering_in) vector<LitTrieVertex> &ordering_in)
: mutable_trie(trie_in), failure_map(failure_map_in), : mutable_trie(trie_in), failure_map(failure_map_in),
ordering(ordering_in) {} ordering(ordering_in) {}
@ -445,7 +445,7 @@ struct ACVisitor : public boost::default_bfs_visitor {
private: private:
LitTrie &mutable_trie; //!< For setting reports property. LitTrie &mutable_trie; //!< For setting reports property.
map<LitTrieVertex, LitTrieVertex> &failure_map; unordered_map<LitTrieVertex, LitTrieVertex> &failure_map;
vector<LitTrieVertex> &ordering; //!< BFS ordering for vertices. vector<LitTrieVertex> &ordering; //!< BFS ordering for vertices.
}; };
} }
@ -471,11 +471,13 @@ bool isSaneTrie(const LitTrie &trie) {
*/ */
static static
void buildAutomaton(LitTrie &trie, void buildAutomaton(LitTrie &trie,
map<LitTrieVertex, LitTrieVertex> &failure_map, unordered_map<LitTrieVertex, LitTrieVertex> &failure_map,
vector<LitTrieVertex> &ordering) { vector<LitTrieVertex> &ordering) {
assert(isSaneTrie(trie)); assert(isSaneTrie(trie));
// Find our failure transitions and reports. // Find our failure transitions and reports.
failure_map.reserve(num_vertices(trie));
ordering.reserve(num_vertices(trie));
ACVisitor ac_vis(trie, failure_map, ordering); ACVisitor ac_vis(trie, failure_map, ordering);
boost::breadth_first_search(trie, trie.root, visitor(ac_vis)); boost::breadth_first_search(trie, trie.root, visitor(ac_vis));
@ -672,7 +674,7 @@ unique_ptr<raw_dfa> buildDfa(LitTrie &trie, bool nocase) {
DEBUG_PRINTF("trie has %zu states\n", num_vertices(trie)); DEBUG_PRINTF("trie has %zu states\n", num_vertices(trie));
vector<LitTrieVertex> ordering; vector<LitTrieVertex> ordering;
map<LitTrieVertex, LitTrieVertex> failure_map; unordered_map<LitTrieVertex, LitTrieVertex> failure_map;
buildAutomaton(trie, failure_map, ordering); buildAutomaton(trie, failure_map, ordering);
// Construct DFA states in BFS order. // Construct DFA states in BFS order.