namespace ue2 {
-typedef ue2::unordered_set<NFAEdge> BackEdgeSet;
-typedef boost::filtered_graph<NGHolder, bad_edge_filter<BackEdgeSet>>
- AcyclicGraph;
+using BackEdgeSet = unordered_set<NFAEdge>;
+using AcyclicGraph =
+ boost::filtered_graph<NGHolder, bad_edge_filter<BackEdgeSet>>;
namespace {
struct exit_info {
static
void checkAndAddExitCandidate(const AcyclicGraph &g,
- const ue2::unordered_set<NFAVertex> &r,
- NFAVertex v, vector<exit_info> &exits) {
+ const unordered_set<NFAVertex> &r, NFAVertex v,
+ vector<exit_info> &exits) {
exit_info v_exit(v);
auto &open = v_exit.open;
}
static
-void findExits(const AcyclicGraph &g, const ue2::unordered_set<NFAVertex> &r,
+void findExits(const AcyclicGraph &g, const unordered_set<NFAVertex> &r,
vector<exit_info> &exits) {
exits.clear();
for (auto v : r) {
}
static
-void refineExits(const AcyclicGraph &g, const ue2::unordered_set<NFAVertex> &r,
+void refineExits(const AcyclicGraph &g, const unordered_set<NFAVertex> &r,
NFAVertex new_v, vector<exit_info> &exits) {
/* new_v is no long an open edge */
for (auto &exit : exits) {
}
/* no open edges: no longer an exit */
- exits.erase(
- remove_if(exits.begin(), exits.end(),
+ exits.erase(remove_if(exits.begin(), exits.end(),
[&](const exit_info &exit) { return exit.open.empty(); }),
- exits.end());
+ exits.end());
checkAndAddExitCandidate(g, r, new_v, exits);
}
}
static
-void setRegion(const ue2::unordered_set<NFAVertex> &r, u32 rid,
- ue2::unordered_map<NFAVertex, u32> ®ions) {
+void setRegion(const unordered_set<NFAVertex> &r, u32 rid,
+ unordered_map<NFAVertex, u32> ®ions) {
for (auto v : r) {
regions[v] = rid;
}
void buildInitialCandidate(const AcyclicGraph &g,
vector<NFAVertex>::const_reverse_iterator &it,
const vector<NFAVertex>::const_reverse_iterator &ite,
- ue2::unordered_set<NFAVertex> *candidate,
+ unordered_set<NFAVertex> &candidate,
/* in exits of prev region;
* out exits from candidate */
vector<exit_info> &exits,
- flat_set<NFAVertex> *open_jumps) {
+ flat_set<NFAVertex> &open_jumps) {
if (it == ite) {
- candidate->clear();
+ candidate.clear();
exits.clear();
return;
}
if (exits.empty()) {
DEBUG_PRINTF("odd\n");
- candidate->clear();
+ candidate.clear();
DEBUG_PRINTF("adding %zu to initial\n", g[*it].index);
- candidate->insert(*it);
- open_jumps->erase(*it);
- checkAndAddExitCandidate(g, *candidate, *it, exits);
+ candidate.insert(*it);
+ open_jumps.erase(*it);
+ checkAndAddExitCandidate(g, candidate, *it, exits);
++it;
return;
}
auto enters = exits.front().open; // copy
- candidate->clear();
+ candidate.clear();
for (; it != ite; ++it) {
DEBUG_PRINTF("adding %zu to initial\n", g[*it].index);
- candidate->insert(*it);
+ candidate.insert(*it);
if (contains(enters, *it)) {
break;
}
if (it != ite) {
enters.erase(*it);
- *open_jumps = move(enters);
- DEBUG_PRINTF("oj size = %zu\n", open_jumps->size());
+ open_jumps = move(enters);
+ DEBUG_PRINTF("oj size = %zu\n", open_jumps.size());
++it;
} else {
- open_jumps->clear();
+ open_jumps.clear();
}
- findExits(g, *candidate, exits);
+ findExits(g, candidate, exits);
}
static
void findDagLeaders(const NGHolder &h, const AcyclicGraph &g,
const vector<NFAVertex> &topo,
- ue2::unordered_map<NFAVertex, u32> ®ions) {
+ unordered_map<NFAVertex, u32> ®ions) {
assert(!topo.empty());
u32 curr_id = 0;
- vector<NFAVertex>::const_reverse_iterator t_it = topo.rbegin();
- ue2::unordered_set<NFAVertex> candidate;
+ auto t_it = topo.rbegin();
+ unordered_set<NFAVertex> candidate;
flat_set<NFAVertex> open_jumps;
DEBUG_PRINTF("adding %zu to current\n", g[*t_it].index);
assert(t_it != topo.rend());
DEBUG_PRINTF("setting region %u\n", curr_id);
}
setRegion(candidate, curr_id++, regions);
- buildInitialCandidate(g, t_it, topo.rend(), &candidate, exits,
- &open_jumps);
+ buildInitialCandidate(g, t_it, topo.rend(), candidate, exits,
+ open_jumps);
} else {
NFAVertex curr = *t_it;
DEBUG_PRINTF("adding %zu to current\n", g[curr].index);
static
void mergeUnderBackEdges(const NGHolder &g, const vector<NFAVertex> &topo,
const BackEdgeSet &backEdges,
- ue2::unordered_map<NFAVertex, u32> ®ions) {
+ unordered_map<NFAVertex, u32> ®ions) {
for (const auto &e : backEdges) {
NFAVertex u = source(e, g);
NFAVertex v = target(e, g);
static
void liftSinks(const AcyclicGraph &acyclic_g, vector<NFAVertex> &topoOrder) {
- ue2::unordered_set<NFAVertex> sinks;
+ unordered_set<NFAVertex> sinks;
for (auto v : vertices_range(acyclic_g)) {
if (is_special(v, acyclic_g)) {
continue;
}
NFAVertex s = *ri;
DEBUG_PRINTF("handling sink %zu\n", acyclic_g[s].index);
- ue2::unordered_set<NFAVertex> parents;
+ unordered_set<NFAVertex> parents;
for (const auto &e : in_edges_range(s, acyclic_g)) {
parents.insert(NFAVertex(source(e, acyclic_g)));
}
return topoOrder;
}
-ue2::unordered_map<NFAVertex, u32> assignRegions(const NGHolder &g) {
+unordered_map<NFAVertex, u32> assignRegions(const NGHolder &g) {
assert(hasCorrectlyNumberedVertices(g));
const u32 numVertices = num_vertices(g);
DEBUG_PRINTF("assigning regions for %u vertices in holder\n", numVertices);
vector<NFAVertex> topoOrder = buildTopoOrder(g, acyclic_g, colours);
// Everybody starts in region 0.
- ue2::unordered_map<NFAVertex, u32> regions;
+ unordered_map<NFAVertex, u32> regions;
regions.reserve(numVertices);
for (auto v : vertices_range(g)) {
regions.emplace(v, 0);