diff --git a/src/compiler/asserts.cpp b/src/compiler/asserts.cpp index 444422260..5f158474f 100644 --- a/src/compiler/asserts.cpp +++ b/src/compiler/asserts.cpp @@ -127,7 +127,7 @@ void replaceAssertVertex(NGHolder &g, NFAVertex t, const ExpressionInfo &expr, // Wire up all the predecessors to all the successors. - for (const auto &inEdge : in_edges_range(t, g)) { + for (const auto inEdge : in_edges_range(t, g)) { NFAVertex u = source(inEdge, g); if (u == t) { continue; // ignore self-loops @@ -141,7 +141,7 @@ void replaceAssertVertex(NGHolder &g, NFAVertex t, const ExpressionInfo &expr, continue; } - for (const auto &outEdge : out_edges_range(t, g)) { + for (const auto outEdge : out_edges_range(t, g)) { NFAVertex v = target(outEdge, g); DEBUG_PRINTF("consider path [%zu,%zu,%zu]\n", g[u].index, @@ -229,7 +229,7 @@ void checkForMultilineStart(ReportManager &rm, NGHolder &g, /* we need to interpose a dummy dot vertex between v and accept if * required so that ^ doesn't match trailing \n */ - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (target(e, g) == g.accept) { dead.push_back(e); } @@ -283,7 +283,7 @@ void removeAssertVertices(ReportManager &rm, NGHolder &g, // Build a cache of (u, v) vertex pairs to edge descriptors. edge_cache_t edge_cache; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { edge_cache[make_pair(source(e, g), target(e, g))] = e; } diff --git a/src/nfa/castlecompile.cpp b/src/nfa/castlecompile.cpp index 5884ebb21..e1eda5d43 100644 --- a/src/nfa/castlecompile.cpp +++ b/src/nfa/castlecompile.cpp @@ -155,7 +155,7 @@ void getNeighborInfo(const CliqueGraph &g, vector &neighbor, u32 id = g[cv].stateId; // find neighbors for cv - for (const auto &v : adjacent_vertices_range(cv, g)) { + for (const auto v : adjacent_vertices_range(cv, g)) { if (g[v].stateId != id && contains(group, g[v].stateId)) { neighbor.push_back(g[v].stateId); DEBUG_PRINTF("Neighbor:%u\n", g[v].stateId); diff --git a/src/nfa/goughcompile.cpp b/src/nfa/goughcompile.cpp index d41c6f423..3a35984e1 100644 --- a/src/nfa/goughcompile.cpp +++ b/src/nfa/goughcompile.cpp @@ -504,7 +504,7 @@ void copy_propagation(GoughGraph &g, const Grey &grey) { for (auto v : vertices_range(g)) { copy_propagate_update_vars(g[v].vars, &changes); } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { copy_propagate_update_vars(g[e].vars, &changes); } } while(changes); @@ -562,7 +562,7 @@ void remove_dead(GoughGraph &g) { i--; } } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { for (u32 i = 0; i < g[e].vars.size(); i++) { GoughSSAVar *var = g[e].vars[i].get(); if (var->seen) { @@ -896,7 +896,7 @@ static void build_blocks(const GoughGraph &g, map > *blocks, u32 base_temp_slot) { - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { if (g[e].vars.empty()) { continue; } @@ -946,7 +946,7 @@ void copy_in_blocks(raw_som_dfa &raw, u8 alphaShift, const GoughGraph &cfg, assert(top_sym == raw.alpha_size - 1U); map, u32> &processed = *prog_offsets; - for (const auto &e : edges_range(cfg)) { + for (const auto e : edges_range(cfg)) { if (!contains(blocks, gough_edge_id(cfg, e))) { continue; } @@ -985,7 +985,7 @@ void copy_in_blocks(raw_som_dfa &raw, u8 alphaShift, const GoughGraph &cfg, } bool find_normal_self_loop(GoughVertex v, const GoughGraph &g, GoughEdge *out) { - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (target(e, g) != v) { continue; } diff --git a/src/nfa/goughcompile_accel.cpp b/src/nfa/goughcompile_accel.cpp index 849202a19..080e944a3 100644 --- a/src/nfa/goughcompile_accel.cpp +++ b/src/nfa/goughcompile_accel.cpp @@ -146,7 +146,7 @@ bool verify_neighbour(const GoughGraph &g, GoughVertex u, const map > &blocks, const set &succs, const vector &block_sl) { - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { if (!g[e].reach.any()) { /* ignore top edges */ continue; } @@ -172,7 +172,7 @@ static bool verify_neighbour_no_block(const GoughGraph &g, GoughVertex u, const map > &blocks, const set &succs) { - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { if (!g[e].reach.any()) { /* ignore top edges */ continue; } @@ -216,7 +216,7 @@ bool allow_two_byte_accel(const GoughGraph &g, const auto &block_sl = blocks.at(gough_edge_id(g, self_loop)); set succs; - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].reach.none()) { /* ignore top edges */ continue; } @@ -237,7 +237,7 @@ bool allow_two_byte_accel(const GoughGraph &g, } else { DEBUG_PRINTF("no edge plan on self loop\n"); set succs; - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].reach.none()) { /* ignore top edges */ continue; } diff --git a/src/nfa/goughcompile_dump.cpp b/src/nfa/goughcompile_dump.cpp index 96ab196e3..008d0930f 100644 --- a/src/nfa/goughcompile_dump.cpp +++ b/src/nfa/goughcompile_dump.cpp @@ -85,7 +85,7 @@ void dump_graph(const GoughGraph &g, const string &base, const Grey &grey) { fprintf(f, "label = \"%u\"];\n", g[v].state_id); } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { GoughVertex s = source(e, g); GoughVertex t = target(e, g); @@ -153,7 +153,7 @@ void dump_var_mapping(const GoughGraph &g, const string &base, fprintf(f, "\n"); } } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { set used = uses(g[e]); if (g[e].vars.empty() && used.empty()) { continue; @@ -200,7 +200,7 @@ void gather_vars(const GoughGraph &g, vector *vars, } } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { for (u32 i = 0; i < g[e].vars.size(); i++) { const GoughSSAVar *vp = g[e].vars[i].get(); stringstream ss; diff --git a/src/nfa/goughcompile_reg.cpp b/src/nfa/goughcompile_reg.cpp index 48e515b9a..590308924 100644 --- a/src/nfa/goughcompile_reg.cpp +++ b/src/nfa/goughcompile_reg.cpp @@ -60,7 +60,7 @@ void all_vars(const GoughGraph &g, vector *out) { for (auto v : vertices_range(g)) { push_back_all_raw(out, g[v].vars); } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { push_back_all_raw(out, g[e].vars); } } @@ -89,7 +89,7 @@ void fill_aux(const GoughGraph &g, GoughGraphAux *aux) { aux->reporters[var].insert(v); } } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { for (const auto &var : g[e].vars) { aux->containing_e[var.get()] = e; DEBUG_PRINTF("%u is on edge %u->%u\n", var->slot, @@ -217,7 +217,7 @@ void handle_pending_vertex(GoughVertex def_v, const GoughGraph &g, DEBUG_PRINTF("contains target vertex\n"); return; /* we have reached def */ } - for (const auto &e : in_edges_range(current, g)) { + for (const auto e : in_edges_range(current, g)) { handle_pending_edge(g, e, nullptr, pending_vertex, rv); } } @@ -293,7 +293,7 @@ u32 initial_slots(const GoughGraph &g) { for (auto v : vertices_range(g)) { set_initial_slots(g[v].vars, &next_slot); } - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { set_initial_slots(g[e].vars, &next_slot); } @@ -405,7 +405,7 @@ void find_dom_ordering(const GoughGraph &cfg, vector *out) { for (auto it = g_order.rbegin(); it != g_order.rend(); ++it) { add_to_dom_ordering(cfg[*it].vars, out); - for (const auto &e : out_edges_range(*it, cfg)) { + for (const auto e : out_edges_range(*it, cfg)) { add_to_dom_ordering(cfg[e].vars, out); } } @@ -444,7 +444,7 @@ void update_local_slots(GoughGraph &g, set &locals, /* local variables only occur on edges (joins are never local) */ u32 allocated_count = 0; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { u32 next_slot = local_base; for (auto &var : g[e].vars) { if (contains(locals, var.get())) { diff --git a/src/nfa/limex_compile.cpp b/src/nfa/limex_compile.cpp index 9233ae515..1c9a4a865 100644 --- a/src/nfa/limex_compile.cpp +++ b/src/nfa/limex_compile.cpp @@ -1239,7 +1239,7 @@ void findMaskedCompressionStates(const build_info &args, if (!inspects_states_for_accepts(h) && !hasInitDsStates(h, args.state_ids)) { NFAStateSet nonleaf(args.num_states); - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { u32 from = args.state_ids.at(source(e, h)); u32 to = args.state_ids.at(target(e, h)); if (from == NO_STATE) { @@ -1459,7 +1459,7 @@ u32 buildExceptionMap(const build_info &args, ReportListCache &reports_cache, } // are we a non-limited transition? - for (const auto &oe : out_edges_range(v, h)) { + for (const auto oe : out_edges_range(v, h)) { if (contains(exceptional, oe)) { NFAVertex w = target(oe, h); u32 w_idx = args.state_ids.at(w); @@ -1550,7 +1550,7 @@ static u32 findMaxVarShift(const build_info &args, u32 nShifts) { const NGHolder &h = args.h; u32 shiftMask = 0; - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { u32 from = args.state_ids.at(source(e, h)); u32 to = args.state_ids.at(target(e, h)); if (from == NO_STATE || to == NO_STATE) { @@ -1579,7 +1579,7 @@ int getLimexScore(const build_info &args, u32 nShifts) { maxVarShift = findMaxVarShift(args, nShifts); NFAStateSet exceptionalStates(args.num_states); - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { u32 from = args.state_ids.at(source(e, h)); u32 to = args.state_ids.at(target(e, h)); if (from == NO_STATE || to == NO_STATE) { @@ -1870,7 +1870,7 @@ struct Factory { u32 shiftMask = 0; int shiftMaskIdx = 0; - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { u32 from = args.state_ids.at(source(e, h)); u32 to = args.state_ids.at(target(e, h)); if (from == NO_STATE || to == NO_STATE) { @@ -1908,7 +1908,7 @@ struct Factory { u32 maxShift) { const NGHolder &h = args.h; - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { u32 from = args.state_ids.at(source(e, h)); u32 to = args.state_ids.at(target(e, h)); if (from == NO_STATE || to == NO_STATE) { diff --git a/src/nfa/mcsheng_compile.cpp b/src/nfa/mcsheng_compile.cpp index fb75e49a3..0a0af0406 100644 --- a/src/nfa/mcsheng_compile.cpp +++ b/src/nfa/mcsheng_compile.cpp @@ -549,7 +549,7 @@ dstate_id_t find_sheng_states(dfa_info &info, /* get an estimate of stickness of the cyclic: assume any edges from * states with larger state ids are back edges */ CharReach est_back_reach; - for (const auto &u : inv_adjacent_vertices_range(v, g)) { + for (const auto u : inv_adjacent_vertices_range(v, g)) { if (g[u].index < g[v].index) { continue; } @@ -587,7 +587,7 @@ dstate_id_t find_sheng_states(dfa_info &info, } sheng_states.insert(v); - for (const auto &t : adjacent_vertices_range(v, g)) { + for (const auto t : adjacent_vertices_range(v, g)) { if (!contains(considered, g[t].index)) { to_consider.push_back(t); } diff --git a/src/nfagraph/ng_anchored_dots.cpp b/src/nfagraph/ng_anchored_dots.cpp index 9a13376d1..0c50848cf 100644 --- a/src/nfagraph/ng_anchored_dots.cpp +++ b/src/nfagraph/ng_anchored_dots.cpp @@ -177,7 +177,7 @@ void reformAnchoredRepeatsComponent(NGHolder &g, bool selfLoop = false; bool bustOut = false; - for (const auto &e : out_edges_range(dotV, g)) { + for (const auto e : out_edges_range(dotV, g)) { NFAVertex t = target(e, g); if (t == dotV) { selfLoop = true; @@ -280,7 +280,7 @@ void reformUnanchoredRepeatsComponent(NGHolder &g, bool selfLoop = false; bool bustOut = false; - for (const auto &e : out_edges_range(dotV, g)) { + for (const auto e : out_edges_range(dotV, g)) { NFAVertex t = target(e, g); if (t == dotV) { diff --git a/src/nfagraph/ng_asserts.cpp b/src/nfagraph/ng_asserts.cpp index 8812afadb..fd74a2aa4 100644 --- a/src/nfagraph/ng_asserts.cpp +++ b/src/nfagraph/ng_asserts.cpp @@ -92,7 +92,7 @@ static const CharReach CHARREACH_NONWORD_UCP_PRE(CHARREACH_NONWORD); static vector getAsserts(const NGHolder &g) { vector out; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { if (g[e].assert_flags) { out.push_back(e); } @@ -255,7 +255,7 @@ void splitVertex(ReportManager &rm, NGHolder &g, const ExpressionInfo &expr, static void resolveEdges(ReportManager &rm, NGHolder &g, const ExpressionInfo &expr, set *dead) { - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { u32 flags = g[e].assert_flags; if (!flags) { continue; diff --git a/src/nfagraph/ng_calc_components.cpp b/src/nfagraph/ng_calc_components.cpp index 3e9454eee..0ff6748c1 100644 --- a/src/nfagraph/ng_calc_components.cpp +++ b/src/nfagraph/ng_calc_components.cpp @@ -198,7 +198,7 @@ vector findShellEdges(const NGHolder &g, const flat_set &tail_shell) { vector shell_edges; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { auto u = source(e, g); auto v = target(e, g); diff --git a/src/nfagraph/ng_cyclic_redundancy.cpp b/src/nfagraph/ng_cyclic_redundancy.cpp index 0b24bf07a..134856c60 100644 --- a/src/nfagraph/ng_cyclic_redundancy.cpp +++ b/src/nfagraph/ng_cyclic_redundancy.cpp @@ -173,7 +173,7 @@ bool removeCyclicPathRedundancy(Graph &g, typename Graph::vertex_descriptor v, flat_set s; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { vertex_descriptor u = source(e, g); if (u == v) { continue; diff --git a/src/nfagraph/ng_depth.cpp b/src/nfagraph/ng_depth.cpp index 6c90326ce..d42013344 100644 --- a/src/nfagraph/ng_depth.cpp +++ b/src/nfagraph/ng_depth.cpp @@ -156,7 +156,7 @@ vector findLoopReachable(const Graph &g, } for (auto v : reverse(topoOrder)) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (deadNodes[g[source(e, g)].index]) { deadNodes[g[v].index] = true; break; diff --git a/src/nfagraph/ng_edge_redundancy.cpp b/src/nfagraph/ng_edge_redundancy.cpp index b8354bd42..e3a75cdb5 100644 --- a/src/nfagraph/ng_edge_redundancy.cpp +++ b/src/nfagraph/ng_edge_redundancy.cpp @@ -351,7 +351,7 @@ void checkLargeOutU(const NGHolder &g, NFAVertex u, return; } - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { const NFAVertex v = target(e, g); if (is_special(v, g)) { @@ -364,7 +364,7 @@ void checkLargeOutU(const NGHolder &g, NFAVertex u, /* Now need check to find any edges which can be removed due to the * existence of edge e */ - for (const auto &e2 : in_edges_range(v, g)) { + for (const auto e2 : in_edges_range(v, g)) { if (e == e2 || contains(*dead, e2)) { continue; } @@ -386,7 +386,7 @@ void checkSmallOutU(const NGHolder &g, NFAVertex u, const flat_set &parents_u, map &done, set *dead) { - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { const NFAVertex v = target(e, g); if (is_special(v, g)) { @@ -399,7 +399,7 @@ void checkSmallOutU(const NGHolder &g, NFAVertex u, /* Now need check to find any edges which can be removed due to the * existence of edge e */ - for (const auto &e2 : in_edges_range(v, g)) { + for (const auto e2 : in_edges_range(v, g)) { if (e == e2 || contains(*dead, e2)) { continue; } @@ -487,7 +487,7 @@ bool removeSiblingsOfStartDotStar(NGHolder &g) { continue; } - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { NFAVertex u = source(e, g); if (is_special(u, g)) { continue; @@ -518,7 +518,7 @@ bool optimiseVirtualStarts(NGHolder &g) { continue; } - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (!is_any_start(source(e, g), g)) { dead.push_back(e); } diff --git a/src/nfagraph/ng_equivalence.cpp b/src/nfagraph/ng_equivalence.cpp index a42a0ac71..616bfddd7 100644 --- a/src/nfagraph/ng_equivalence.cpp +++ b/src/nfagraph/ng_equivalence.cpp @@ -243,12 +243,12 @@ bool isIrreducible(const NGHolder &g) { #ifndef NDEBUG static bool hasEdgeAsserts(NFAVertex v, const NGHolder &g) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (g[e].assert_flags != 0) { return true; } } - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].assert_flags != 0) { return true; } @@ -280,7 +280,7 @@ vector> getVertexInfos(const NGHolder &g) { NFAVertex v = vi->v; // find predecessors - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { NFAVertex u = source(e, g); VertexInfo *u_vi = vertex_map[g[u].index]; diff --git a/src/nfagraph/ng_execute.cpp b/src/nfagraph/ng_execute.cpp index 9d9048947..ee7f1a9ce 100644 --- a/src/nfagraph/ng_execute.cpp +++ b/src/nfagraph/ng_execute.cpp @@ -97,7 +97,7 @@ void filter_by_reach(const vector &info, dynamic_bitset<> *states, } } -template +template static void execute_graph_i(const NGHolder &g, const vector &info, const inputT &input, dynamic_bitset<> *states, @@ -106,7 +106,7 @@ void execute_graph_i(const NGHolder &g, const vector &info, dynamic_bitset<> next(curr.size()); DEBUG_PRINTF("%zu states in\n", states->count()); - for (const auto &e : input) { + for (elementT e : input) { DEBUG_PRINTF("processing %s\n", describeClass(e).c_str()); step(g, info, curr, &next); if (kill_sds) { @@ -165,7 +165,7 @@ flat_set execute_graph(const NGHolder &g, const ue2_literal &input, auto info = makeInfoTable(g); auto work_states = makeStateBitset(g, initial_states); - execute_graph_i(g, info, input, &work_states, kill_sds); + execute_graph_i(g, info, input, &work_states, kill_sds); return getVertices(work_states, info); } @@ -178,7 +178,7 @@ flat_set execute_graph(const NGHolder &g, auto info = makeInfoTable(g); auto work_states = makeStateBitset(g, initial_states); - execute_graph_i(g, info, input, &work_states, false); + execute_graph_i, const CharReach&>(g, info, input, &work_states, false); return getVertices(work_states, info); } diff --git a/src/nfagraph/ng_extparam.cpp b/src/nfagraph/ng_extparam.cpp index 6eb23113f..bb632003b 100644 --- a/src/nfagraph/ng_extparam.cpp +++ b/src/nfagraph/ng_extparam.cpp @@ -409,7 +409,7 @@ bool anchorPatternWithBoundedRepeat(NGHolder &g, ReportManager &rm) { static NFAVertex findSingleCyclic(const NGHolder &g) { NFAVertex v = NGHolder::null_vertex(); - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { if (source(e, g) == target(e, g)) { if (source(e, g) == g.startDs) { continue; @@ -580,7 +580,7 @@ bool transformMinLengthToRepeat(NGHolder &g, ReportManager &rm) { // We want to delete the out-edges of each predecessor, but need to // make sure we don't delete the startDs self loop. - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { if (target(e, g) != g.startDs) { dead.push_back(e); } @@ -729,7 +729,7 @@ void pruneExtUnreachable(NGHolder &g, const ReportManager &rm) { vector dead; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { if (isEdgePrunable(g, report, depths, e)) { DEBUG_PRINTF("pruning\n"); dead.push_back(e); @@ -767,7 +767,7 @@ void pruneVacuousEdges(NGHolder &g, const ReportManager &rm) { }); }; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { const NFAVertex u = source(e, g); const NFAVertex v = target(e, g); @@ -802,7 +802,7 @@ void pruneUnmatchable(NGHolder &g, const vector &depths, const ReportManager &rm, NFAVertex accept) { vector dead; - for (const auto &e : in_edges_range(accept, g)) { + for (const auto e : in_edges_range(accept, g)) { NFAVertex v = source(e, g); if (v == g.accept) { assert(accept == g.acceptEod); // stylised edge diff --git a/src/nfagraph/ng_is_equal.cpp b/src/nfagraph/ng_is_equal.cpp index 35a09d0ea..11da42eaa 100644 --- a/src/nfagraph/ng_is_equal.cpp +++ b/src/nfagraph/ng_is_equal.cpp @@ -172,10 +172,10 @@ bool is_equal_i(const NGHolder &a, const NGHolder &b, vector>> top_a; vector>> top_b; - for (const auto &e : out_edges_range(a.start, a)) { + for (const auto e : out_edges_range(a.start, a)) { top_a.emplace_back(a[target(e, a)].index, a[e].tops); } - for (const auto &e : out_edges_range(b.start, b)) { + for (const auto e : out_edges_range(b.start, b)) { top_b.emplace_back(b[target(e, b)].index, b[e].tops); } diff --git a/src/nfagraph/ng_limex.cpp b/src/nfagraph/ng_limex.cpp index 2f0a55eab..721238afe 100644 --- a/src/nfagraph/ng_limex.cpp +++ b/src/nfagraph/ng_limex.cpp @@ -424,7 +424,7 @@ void makeTopStates(NGHolder &g, map> &tops_out, map> top_succs; map> succ_tops; - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { NFAVertex v = target(e, g); for (u32 t : g[e].tops) { top_succs[t].insert(v); @@ -510,7 +510,7 @@ set findZombies(const NGHolder &h, ok:; } - for (const auto &v : inv_adjacent_vertices_range(h.accept, h)) { + for (const auto v : inv_adjacent_vertices_range(h.accept, h)) { if (state_ids.at(v) != NO_STATE) { zombies.insert(v); } @@ -610,7 +610,7 @@ prepareGraph(const NGHolder &h_in, const ReportManager *rm, static void remapReportsToPrograms(NGHolder &h, const ReportManager &rm) { - for (const auto &v : vertices_range(h)) { + for (const auto v : vertices_range(h)) { auto &reports = h[v].reports; if (reports.empty()) { continue; diff --git a/src/nfagraph/ng_literal_analysis.cpp b/src/nfagraph/ng_literal_analysis.cpp index d25ac43e8..594d6cba0 100644 --- a/src/nfagraph/ng_literal_analysis.cpp +++ b/src/nfagraph/ng_literal_analysis.cpp @@ -119,7 +119,7 @@ void dumpGraph(const char *filename, const LitGraph &lg) { fout << endl; } - for (const auto &e : edges_range(lg)) { + for (const auto e : edges_range(lg)) { LitVertex u = source(e, lg), v = target(e, lg); fout << lg[u].index << " -> " << lg[v].index << "[label=\"" << lg[e].score << "\"]" @@ -359,7 +359,7 @@ u64a litUniqueness(const string &s) { static u64a litCountBits(const ue2_literal &lit) { u64a n = 0; - for (const auto &c : lit) { + for (const auto c : lit) { n += c.nocase ? 7 : 8; } return n; @@ -488,7 +488,7 @@ vector add_reverse_edges_and_index(LitGraph &lg) { const size_t edge_count = num_edges(lg); vector fwd_edges; fwd_edges.reserve(edge_count); - for (const auto &e : edges_range(lg)) { + for (const auto e : edges_range(lg)) { fwd_edges.push_back(e); } @@ -547,7 +547,7 @@ void findMinCut(LitGraph &lg, vector &cutset) { vector white_cut, black_cut; u64a white_flow = 0, black_flow = 0; - for (const auto &e : edges_range(lg)) { + for (const auto e : edges_range(lg)) { const LitVertex u = source(e, lg), v = target(e, lg); const auto ucolor = get(colors, u); const auto vcolor = get(colors, v); @@ -694,7 +694,7 @@ set getLiteralSet(const NGHolder &g, const NFAVertex &v, set ls; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (source(e, g) == v && only_first_encounter) { continue; /* ignore self loop on root vertex as we are interested in * the first time we visit the vertex on the way to @@ -719,7 +719,7 @@ vector scoreEdges(const NGHolder &g, const flat_set &known_bad) { vector scores(num_edges(g)); - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { u32 eidx = g[e].index; assert(eidx < scores.size()); if (contains(known_bad, e)) { diff --git a/src/nfagraph/ng_literal_decorated.cpp b/src/nfagraph/ng_literal_decorated.cpp index 61a31dbf3..ba1b6f9f5 100644 --- a/src/nfagraph/ng_literal_decorated.cpp +++ b/src/nfagraph/ng_literal_decorated.cpp @@ -132,7 +132,7 @@ bool findPaths(const NGHolder &g, vector &paths) { static bool hasLargeDegreeVertex(const NGHolder &g) { - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { if (is_special(v, g)) { // specials can have large degree continue; } diff --git a/src/nfagraph/ng_mcclellan_internal.h b/src/nfagraph/ng_mcclellan_internal.h index f069d7336..a73568df8 100644 --- a/src/nfagraph/ng_mcclellan_internal.h +++ b/src/nfagraph/ng_mcclellan_internal.h @@ -98,7 +98,7 @@ void transition_graph(autom &nfa, const std::vector &vByStateId, for (size_t i = in.find_first(); i != in.npos; i = in.find_next(i)) { NFAVertex u = vByStateId[i]; - for (const auto &v : adjacent_vertices_range(u, graph)) { + for (const auto v : adjacent_vertices_range(u, graph)) { if (contains(unused, v)) { continue; } diff --git a/src/nfagraph/ng_misc_opt.cpp b/src/nfagraph/ng_misc_opt.cpp index 8aaaf99fd..e5849dcce 100644 --- a/src/nfagraph/ng_misc_opt.cpp +++ b/src/nfagraph/ng_misc_opt.cpp @@ -511,7 +511,7 @@ bool mergeCyclicDotStars(NGHolder &g) { vector deadEdges; // check if all adjacent vertices have edges from start - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { NFAVertex t = target(e, g); // skip self if (t == v) { diff --git a/src/nfagraph/ng_netflow.cpp b/src/nfagraph/ng_netflow.cpp index 780a319f5..066b2ed76 100644 --- a/src/nfagraph/ng_netflow.cpp +++ b/src/nfagraph/ng_netflow.cpp @@ -77,7 +77,7 @@ void addReverseEdges(NGHolder &g, vector &reverseEdge, // To avoid walking the graph for _ages_, we build a temporary map of all // edges indexed by vertex pair for existence checks. map, NFAEdge> allEdges; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { NFAVertex u = source(e, g), v = target(e, g); size_t uidx = g[u].index, vidx = g[v].index; allEdges[make_pair(uidx, vidx)] = e; @@ -177,7 +177,7 @@ vector findMinCut(NGHolder &h, const vector &scores) { u64a observed_black_flow = 0; u64a observed_white_flow = 0; - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { NFAVertex from = source(e, h); NFAVertex to = target(e, h); u64a ec = scores[h[e].index]; diff --git a/src/nfagraph/ng_prefilter.cpp b/src/nfagraph/ng_prefilter.cpp index 04611872a..b2e79edb6 100644 --- a/src/nfagraph/ng_prefilter.cpp +++ b/src/nfagraph/ng_prefilter.cpp @@ -215,7 +215,7 @@ map findRegionInfo(const NGHolder &h, static void copyInEdges(NGHolder &g, NFAVertex from, NFAVertex to) { - for (const auto &e : in_edges_range(from, g)) { + for (const auto e : in_edges_range(from, g)) { NFAVertex u = source(e, g); add_edge_if_not_present(u, to, g[e], g); } @@ -223,7 +223,7 @@ void copyInEdges(NGHolder &g, NFAVertex from, NFAVertex to) { static void copyOutEdges(NGHolder &g, NFAVertex from, NFAVertex to) { - for (const auto &e : out_edges_range(from, g)) { + for (const auto e : out_edges_range(from, g)) { NFAVertex t = target(e, g); add_edge_if_not_present(to, t, g[e], g); diff --git a/src/nfagraph/ng_prune.cpp b/src/nfagraph/ng_prune.cpp index adda70312..f5972d26d 100644 --- a/src/nfagraph/ng_prune.cpp +++ b/src/nfagraph/ng_prune.cpp @@ -205,7 +205,7 @@ void pruneHighlanderAccepts(NGHolder &g, const ReportManager &rm) { } // We can prune any out-edges that aren't accepts - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { if (!is_any_accept(target(e, g), g)) { dead.push_back(e); } @@ -304,7 +304,7 @@ void pruneHighlanderDominated(NGHolder &g, const ReportManager &rm) { // If a reporter vertex is dominated by another with the same report, we // can remove that report; if all reports are removed, we can remove the // vertex entirely. - for (const auto v : reporters) { + for (const auto &v : reporters) { const auto reports = g[v].reports; // copy, as we're going to mutate for (const auto &report_id : reports) { if (!isSimpleExhaustible(rm.getReport(report_id))) { @@ -329,7 +329,7 @@ void pruneHighlanderDominated(NGHolder &g, const ReportManager &rm) { // If a reporter vertex has a self-loop, but otherwise only leads to accept // (note: NOT acceptEod) and has simple exhaustible reports, we can delete // the self-loop. - for (const auto v : reporters) { + for (const auto &v : reporters) { if (hasOnlySelfLoopAndExhaustibleAccepts(g, rm, v)) { remove_edge(v, v, g); modified = true; @@ -353,7 +353,7 @@ void pruneHighlanderDominated(NGHolder &g, const ReportManager &rm) { void pruneReport(NGHolder &g, ReportID report) { set dead; - for (const auto &e : in_edges_range(g.accept, g)) { + for (const auto e : in_edges_range(g.accept, g)) { NFAVertex u = source(e, g); auto &reports = g[u].reports; if (contains(reports, report)) { @@ -364,7 +364,7 @@ void pruneReport(NGHolder &g, ReportID report) { } } - for (const auto &e : in_edges_range(g.acceptEod, g)) { + for (const auto e : in_edges_range(g.acceptEod, g)) { NFAVertex u = source(e, g); if (u == g.accept) { continue; @@ -394,7 +394,7 @@ void pruneReport(NGHolder &g, ReportID report) { void pruneAllOtherReports(NGHolder &g, ReportID report) { set dead; - for (const auto &e : in_edges_range(g.accept, g)) { + for (const auto e : in_edges_range(g.accept, g)) { NFAVertex u = source(e, g); auto &reports = g[u].reports; if (contains(reports, report)) { @@ -406,7 +406,7 @@ void pruneAllOtherReports(NGHolder &g, ReportID report) { } } - for (const auto &e : in_edges_range(g.acceptEod, g)) { + for (const auto e : in_edges_range(g.acceptEod, g)) { NFAVertex u = source(e, g); if (u == g.accept) { continue; diff --git a/src/nfagraph/ng_redundancy.cpp b/src/nfagraph/ng_redundancy.cpp index 06b9daeec..7adfe2eef 100644 --- a/src/nfagraph/ng_redundancy.cpp +++ b/src/nfagraph/ng_redundancy.cpp @@ -768,7 +768,7 @@ void findCyclicDom(NGHolder &g, vector &cyclic, // iff all paths through in-edge e of v involve vertices whose // reachability is a subset of reach(dom), we can delete edge e. - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (source(e, g) == dom) { continue; } @@ -806,7 +806,7 @@ void findCyclicPostDom(NGHolder &g, vector &cyclic, // iff all paths through in-edge e of v involve vertices whose // reachability is a subset of reach(dom), we can delete edge e. - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (target(e, g) == postdom) { continue; } diff --git a/src/nfagraph/ng_region.cpp b/src/nfagraph/ng_region.cpp index 2675be643..dd033def5 100644 --- a/src/nfagraph/ng_region.cpp +++ b/src/nfagraph/ng_region.cpp @@ -389,7 +389,7 @@ void liftSinks(const AcyclicGraph &acyclic_g, vector &topoOrder) { NFAVertex s = *ri; DEBUG_PRINTF("handling sink %zu\n", acyclic_g[s].index); unordered_set parents; - for (const auto &e : in_edges_range(s, acyclic_g)) { + for (const auto e : in_edges_range(s, acyclic_g)) { parents.insert(NFAVertex(source(e, acyclic_g))); } diff --git a/src/nfagraph/ng_region.h b/src/nfagraph/ng_region.h index a4708a582..fd5f88358 100644 --- a/src/nfagraph/ng_region.h +++ b/src/nfagraph/ng_region.h @@ -115,7 +115,7 @@ bool isRegionEntry(const Graph &g, NFAVertex v, const std::unordered_map ®ion_map) { // Note that some graph types do not have inv_adjacent_vertices, so we must // use in_edges here. - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (!inSameRegion(g, v, source(e, g), region_map)) { return true; } @@ -141,7 +141,7 @@ bool isRegionExit(const Graph &g, NFAVertex v, template bool isSingletonRegion(const Graph &g, NFAVertex v, const std::unordered_map ®ion_map) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { auto u = source(e, g); if (u != v && inSameRegion(g, v, u, region_map)) { return false; @@ -159,7 +159,7 @@ bool isSingletonRegion(const Graph &g, NFAVertex v, return false; } - for (const auto &e : in_edges_range(w, g)) { + for (const auto e : in_edges_range(w, g)) { auto u = source(e, g); if (u != v && inSameRegion(g, v, u, region_map)) { return false; @@ -193,7 +193,7 @@ bool isOptionalRegion(const Graph &g, NFAVertex v, // Optional if v has a predecessor in an earlier region that has a // successor in a later one. - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { auto u = source(e, g); if (inSameRegion(g, v, u, region_map)) { continue; diff --git a/src/nfagraph/ng_repeat.cpp b/src/nfagraph/ng_repeat.cpp index 1f63ad3c6..735466d37 100644 --- a/src/nfagraph/ng_repeat.cpp +++ b/src/nfagraph/ng_repeat.cpp @@ -230,7 +230,7 @@ bool hasDifferentTops(const NGHolder &g, const vector &verts) { const flat_set *tops = nullptr; for (auto v : verts) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { NFAVertex u = source(e, g); if (u != g.start && u != g.startDs) { continue; // Only edges from starts have valid top properties. @@ -732,7 +732,7 @@ void unpeelNearEnd(NGHolder &g, ReachSubgraph &rsi, } else { /* Skip edge for the cyclic state; note that we must clone their * edge properties as they may include tops. */ - for (const auto &e : in_edges_range(first, g)) { + for (const auto e : in_edges_range(first, g)) { add_edge(source(e, g), d, g[e], g); } } @@ -813,7 +813,7 @@ void replaceSubgraphWithSpecial(NGHolder &g, ReachSubgraph &rsi, depths[first].fromStartDotStar, depths[last].fromStartDotStar); // Wire predecessors to positive trigger. - for (const auto &e : in_edges_range(first, g)) { + for (const auto e : in_edges_range(first, g)) { add_edge(source(e, g), pos_trigger, g[e], g); } @@ -880,7 +880,7 @@ void replaceSubgraphWithLazySpecial(NGHolder &g, ReachSubgraph &rsi, depths[first].fromStartDotStar, depths[last].fromStartDotStar); // Wire predecessors to positive trigger. - for (const auto &e : in_edges_range(first, g)) { + for (const auto e : in_edges_range(first, g)) { add_edge(source(e, g), pos_trigger, g[e], g); } @@ -1159,7 +1159,7 @@ void addTriggers(NGHolder &g, vector dead; map> starts_by_top; - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { const NFAVertex &v = target(e, g); if (v == g.startDs) { continue; @@ -1402,7 +1402,7 @@ bool hasSoleEntry(const NGHolder &g, const ReachSubgraph &rsi, region_map.emplace(rg_map.at(v), repeat_region); } - for (const auto &v : vertices_range(rg)) { + for (const auto v : vertices_range(rg)) { if (!contains(region_map, v)) { DEBUG_PRINTF("rg vertex %zu in lhs (trigger)\n", rg[v].index); region_map.emplace(v, lhs_region); @@ -2110,7 +2110,7 @@ void populateFixedTopInfo(const map &fixed_depth_tops, unordered_map top_depths; auto colours = make_small_color_map(g); - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { NFAVertex v = target(e, g); if (v == g.startDs) { continue; @@ -2409,7 +2409,7 @@ void analyseRepeats(NGHolder &g, const ReportManager *rm, static bool allOneReach(const NGHolder &g) { const CharReach *cr = nullptr; - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { if (is_special(v, g)) { continue; } diff --git a/src/nfagraph/ng_restructuring.cpp b/src/nfagraph/ng_restructuring.cpp index 704697e57..6cda479e5 100644 --- a/src/nfagraph/ng_restructuring.cpp +++ b/src/nfagraph/ng_restructuring.cpp @@ -134,7 +134,7 @@ static unordered_map getStateIndices(const NGHolder &h, const vector &ordering) { unordered_map states; - for (const auto &v : vertices_range(h)) { + for (const auto v : vertices_range(h)) { states[v] = NO_STATE; } diff --git a/src/nfagraph/ng_som.cpp b/src/nfagraph/ng_som.cpp index d23ac408b..197b03640 100644 --- a/src/nfagraph/ng_som.cpp +++ b/src/nfagraph/ng_som.cpp @@ -1131,7 +1131,7 @@ void expandGraph(NGHolder &g, unordered_map ®ions, for (const auto &m : orig_to_copy) { NFAVertex v = m.first, v2 = m.second; - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { NFAVertex t = target(e, g); u32 t_region = regions.at(t); if (t_region >= split_region && !is_special(t, g)) { @@ -1141,7 +1141,7 @@ void expandGraph(NGHolder &g, unordered_map ®ions, add_edge_if_not_present(v2, t, g[e], g); } - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { NFAVertex u = source(e, g); if (regions.at(u) >= split_region && !is_special(u, g)) { assert(contains(orig_to_copy, u)); @@ -1653,7 +1653,7 @@ void implementSomPlan(NG &ng, const ExpressionInfo &expr, u32 comp_id, static void anchorStarts(NGHolder &g) { vector dead; - for (const auto &e : out_edges_range(g.startDs, g)) { + for (const auto e : out_edges_range(g.startDs, g)) { NFAVertex v = target(e, g); if (v == g.startDs) { continue; @@ -1716,7 +1716,7 @@ void makeSomRevNfaReports(ReportManager &rm, NGHolder &g, NFAVertex sink, static void clearProperInEdges(NGHolder &g, const NFAVertex sink) { vector dead; - for (const auto &e : in_edges_range(sink, g)) { + for (const auto e : in_edges_range(sink, g)) { if (source(e, g) == g.accept) { continue; } @@ -2420,7 +2420,7 @@ bool splitOffBestLiteral(const NGHolder &g, * EXTERNAL_CALLBACK_SOM_PASS reports. */ void makeReportsSomPass(ReportManager &rm, NGHolder &g) { - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { const auto &reports = g[v].reports; if (reports.empty()) { continue; diff --git a/src/nfagraph/ng_som_add_redundancy.cpp b/src/nfagraph/ng_som_add_redundancy.cpp index 33544ec17..b3d188a64 100644 --- a/src/nfagraph/ng_som_add_redundancy.cpp +++ b/src/nfagraph/ng_som_add_redundancy.cpp @@ -99,7 +99,7 @@ static bool forkVertex(NFAVertex v, NGHolder &g, vector &depths, set &dead, size_t *numNewVertices) { map> predGroups; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { const DepthMinMax &d = getDepth(source(e, g), g, depths); assert(d.min == d.max); predGroups[d.min].push_back(e); @@ -126,7 +126,7 @@ bool forkVertex(NFAVertex v, NGHolder &g, vector &depths, clone_depth.str().c_str()); // Add copies of the out-edges from v. - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { add_edge(clone, target(e, g), g[e], g); } diff --git a/src/nfagraph/ng_squash.cpp b/src/nfagraph/ng_squash.cpp index 03495d144..d220a39f5 100644 --- a/src/nfagraph/ng_squash.cpp +++ b/src/nfagraph/ng_squash.cpp @@ -602,7 +602,7 @@ void removeEdgesToAccept(NGHolder &g, NFAVertex v) { set dead; - for (const auto &e : in_edges_range(g.accept, g)) { + for (const auto e : in_edges_range(g.accept, g)) { NFAVertex u = source(e, g); const auto &r = g[u].reports; if (!r.empty() && is_subset_of(r, reports)) { @@ -611,7 +611,7 @@ void removeEdgesToAccept(NGHolder &g, NFAVertex v) { } } - for (const auto &e : in_edges_range(g.acceptEod, g)) { + for (const auto e : in_edges_range(g.acceptEod, g)) { NFAVertex u = source(e, g); const auto &r = g[u].reports; if (!r.empty() && is_subset_of(r, reports)) { diff --git a/src/nfagraph/ng_uncalc_components.cpp b/src/nfagraph/ng_uncalc_components.cpp index 4ad5ff787..9c1fb52d1 100644 --- a/src/nfagraph/ng_uncalc_components.cpp +++ b/src/nfagraph/ng_uncalc_components.cpp @@ -289,7 +289,7 @@ void mergeNfaComponent(NGHolder &dest, const NGHolder &vic, size_t common_len) { /* add edges */ DEBUG_PRINTF("common_len=%zu\n", common_len); - for (const auto &e : edges_range(vic)) { + for (const auto e : edges_range(vic)) { NFAVertex u_old = source(e, vic); NFAVertex v_old = target(e, vic); NFAVertex u = vmap[u_old]; diff --git a/src/nfagraph/ng_util.cpp b/src/nfagraph/ng_util.cpp index cb2b71035..2cf6887c1 100644 --- a/src/nfagraph/ng_util.cpp +++ b/src/nfagraph/ng_util.cpp @@ -124,7 +124,7 @@ NFAVertex clone_vertex(NGHolder &g, NFAVertex v) { } void clone_out_edges(NGHolder &g, NFAVertex source, NFAVertex dest) { - for (const auto &e : out_edges_range(source, g)) { + for (const auto e : out_edges_range(source, g)) { NFAVertex t = target(e, g); if (edge(dest, t, g).second) { continue; @@ -137,7 +137,7 @@ void clone_out_edges(NGHolder &g, NFAVertex source, NFAVertex dest) { } void clone_in_edges(NGHolder &g, NFAVertex s, NFAVertex dest) { - for (const auto &e : in_edges_range(s, g)) { + for (const auto e : in_edges_range(s, g)) { NFAVertex ss = source(e, g); assert(!edge(ss, dest, g).second); NFAEdge clone = add_edge(ss, dest, g); @@ -362,7 +362,7 @@ void mustBeSetBefore_int(NFAVertex u, const NGHolder &g, set dead; // Edges leading to u or u's successors. for (auto v : inv_adjacent_vertices_range(u, g)) { - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { NFAVertex t = target(e, g); if (t == u || contains(s, t)) { dead.insert(e); @@ -415,7 +415,7 @@ void appendLiteral(NGHolder &h, const ue2_literal &s) { remove_edge(v, h.accept, h); } - for (const auto &c : s) { + for (const auto c : s) { NFAVertex v = add_vertex(h); h[v].char_reach = c; for (auto u : tail) { @@ -432,14 +432,14 @@ void appendLiteral(NGHolder &h, const ue2_literal &s) { flat_set getTops(const NGHolder &h) { flat_set tops; - for (const auto &e : out_edges_range(h.start, h)) { + for (const auto e : out_edges_range(h.start, h)) { insert(&tops, h[e].tops); } return tops; } void setTops(NGHolder &h, u32 top) { - for (const auto &e : out_edges_range(h.start, h)) { + for (const auto e : out_edges_range(h.start, h)) { assert(h[e].tops.empty()); if (target(e, h) == h.startDs) { continue; @@ -616,21 +616,21 @@ void reverseHolder(const NGHolder &g_in, NGHolder &g) { NFAVertex acceptEod = vertexMap[g_in.start]; // Successors of starts. - for (const auto &e : out_edges_range(start, g)) { + for (const auto e : out_edges_range(start, g)) { NFAVertex v = target(e, g); add_edge(g.start, v, g[e], g); } - for (const auto &e : out_edges_range(startDs, g)) { + for (const auto e : out_edges_range(startDs, g)) { NFAVertex v = target(e, g); add_edge(g.startDs, v, g[e], g); } // Predecessors of accepts. - for (const auto &e : in_edges_range(accept, g)) { + for (const auto e : in_edges_range(accept, g)) { NFAVertex u = source(e, g); add_edge(u, g.accept, g[e], g); } - for (const auto &e : in_edges_range(acceptEod, g)) { + for (const auto e : in_edges_range(acceptEod, g)) { NFAVertex u = source(e, g); add_edge(u, g.acceptEod, g[e], g); } @@ -770,13 +770,13 @@ bool allMatchStatesHaveReports(const NGHolder &g) { bool isCorrectlyTopped(const NGHolder &g) { if (is_triggered(g)) { - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { if (g[e].tops.empty() != (target(e, g) == g.startDs)) { return false; } } } else { - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { if (!g[e].tops.empty()) { return false; } diff --git a/src/nfagraph/ng_violet.cpp b/src/nfagraph/ng_violet.cpp index 78d73082a..9d26a5199 100644 --- a/src/nfagraph/ng_violet.cpp +++ b/src/nfagraph/ng_violet.cpp @@ -737,7 +737,7 @@ void poisonFromSuccessor(const NGHolder &h, const ue2_literal &succ, EdgeSet bad_edges(edge_count); unordered_map curr; - for (const auto &e : in_edges_range(h.accept, h)) { + for (const auto e : in_edges_range(h.accept, h)) { auto &path_set = curr[source(e, h)]; if (path_set.empty()) { path_set.resize(edge_count); @@ -757,7 +757,7 @@ void poisonFromSuccessor(const NGHolder &h, const ue2_literal &succ, continue; } if (overlaps(h[u].char_reach, *it)) { - for (const auto &e : in_edges_range(u, h)) { + for (const auto e : in_edges_range(u, h)) { auto &new_path_set = next[source(e, h)]; if (new_path_set.empty()) { new_path_set.resize(edge_count); @@ -779,7 +779,7 @@ void poisonFromSuccessor(const NGHolder &h, const ue2_literal &succ, DEBUG_PRINTF("poisoning %zu vertices\n", path.second.count()); } - for (const auto &e : edges_range(h)) { + for (const auto e : edges_range(h)) { if (bad_edges.test(h[e].index)) { bad.insert(e); } @@ -790,7 +790,7 @@ static void poisonForGoodPrefix(const NGHolder &h, const vector &depths, flat_set &bad, const Grey &grey) { - for (const auto &v : vertices_range(h)) { + for (const auto v : vertices_range(h)) { if (!createsAnchoredLHS(h, {v}, depths, grey) && !createsTransientLHS(h, {v}, depths, grey)) { insert(&bad, in_edges_range(v, h)); @@ -1503,7 +1503,7 @@ static void removeRedundantPrefixes(RoseInGraph &g) { STAGE_DEBUG_PRINTF("REMOVING REDUNDANT PREFIXES\n"); - for (const RoseInEdge &e : edges_range(g)) { + for (const RoseInEdge e : edges_range(g)) { RoseInVertex s = source(e, g); RoseInVertex t = target(e, g); @@ -1545,7 +1545,7 @@ void removeRedundantLiteralsFromPrefixes(RoseInGraph &g, STAGE_DEBUG_PRINTF("REMOVING LITERALS FROM PREFIXES\n"); vector to_anchor; - for (const RoseInEdge &e : edges_range(g)) { + for (const RoseInEdge e : edges_range(g)) { RoseInVertex s = source(e, g); RoseInVertex t = target(e, g); @@ -1755,7 +1755,7 @@ void removeRedundantLiteralsFromInfixes(RoseInGraph &g, const CompileContext &cc) { insertion_ordered_map> infixes; - for (const RoseInEdge &e : edges_range(g)) { + for (const RoseInEdge e : edges_range(g)) { RoseInVertex s = source(e, g); RoseInVertex t = target(e, g); @@ -2105,7 +2105,7 @@ void findBetterPrefixes(RoseInGraph &vg, const CompileContext &cc) { prefixes.clear(); /* find prefixes */ - for (const RoseInEdge &e : out_edges_range(start, vg)) { + for (const RoseInEdge e : out_edges_range(start, vg)) { /* outfixes shouldn't have made it this far */ assert(vg[target(e, vg)].type == RIV_LITERAL); if (vg[e].graph) { @@ -2167,7 +2167,7 @@ void extractStrongLiterals(RoseInGraph &vg, const CompileContext &cc) { changed = false; edges_by_graph.clear(); - for (const RoseInEdge &ve : edges_range(vg)) { + for (const RoseInEdge ve : edges_range(vg)) { if (vg[source(ve, vg)].type != RIV_LITERAL) { continue; } @@ -2247,7 +2247,7 @@ void improveWeakInfixes(RoseInGraph &vg, const CompileContext &cc) { continue; } - for (const RoseInEdge &e : out_edges_range(vv, vg)) { + for (const RoseInEdge e : out_edges_range(vv, vg)) { if (vg[target(e, vg)].type != RIV_LITERAL || !vg[e].graph) { continue; } @@ -2259,7 +2259,7 @@ void improveWeakInfixes(RoseInGraph &vg, const CompileContext &cc) { } insertion_ordered_map> weak_edges; - for (const RoseInEdge &ve : edges_range(vg)) { + for (const RoseInEdge ve : edges_range(vg)) { NGHolder *h = vg[ve].graph.get(); if (contains(weak, h)) { weak_edges[h].push_back(ve); @@ -2429,7 +2429,7 @@ void avoidSuffixes(RoseInGraph &vg, const CompileContext &cc) { insertion_ordered_map> suffixes; /* find suffixes */ - for (const RoseInEdge &e : in_edges_range(accept, vg)) { + for (const RoseInEdge e : in_edges_range(accept, vg)) { /* outfixes shouldn't have made it this far */ assert(vg[source(e, vg)].type == RIV_LITERAL); assert(vg[e].graph); /* non suffix paths should be wired to other @@ -2527,7 +2527,7 @@ void lookForDoubleCut(RoseInGraph &vg, const CompileContext &cc) { } insertion_ordered_map> right_edges; - for (const RoseInEdge &ve : edges_range(vg)) { + for (const RoseInEdge ve : edges_range(vg)) { if (vg[ve].graph && vg[source(ve, vg)].type == RIV_LITERAL) { const NGHolder *h = vg[ve].graph.get(); right_edges[h].push_back(ve); @@ -2668,7 +2668,7 @@ void decomposeLiteralChains(RoseInGraph &vg, const CompileContext &cc) { changed = false; right_edges.clear(); - for (const RoseInEdge &ve : edges_range(vg)) { + for (const RoseInEdge ve : edges_range(vg)) { if (vg[ve].graph && vg[source(ve, vg)].type == RIV_LITERAL) { const NGHolder *h = vg[ve].graph.get(); right_edges[h].push_back(ve); @@ -2718,7 +2718,7 @@ void lookForCleanEarlySplits(RoseInGraph &vg, const CompileContext &cc) { insertion_ordered_map> rightfixes; for (RoseInVertex v : curr) { - for (const RoseInEdge &e : out_edges_range(v, vg)) { + for (const RoseInEdge e : out_edges_range(v, vg)) { if (vg[e].graph) { NGHolder *h = vg[e].graph.get(); rightfixes[h].push_back(e); @@ -2742,7 +2742,7 @@ void rehomeEodSuffixes(RoseInGraph &vg) { // Find edges to accept with EOD-anchored graphs that we can move over to // acceptEod. vector acc_edges; - for (const auto &e : edges_range(vg)) { + for (const auto e : edges_range(vg)) { if (vg[target(e, vg)].type != RIV_ACCEPT) { continue; } @@ -2908,7 +2908,7 @@ bool ensureImplementable(RoseBuild &rose, RoseInGraph &vg, bool allow_changes, DEBUG_PRINTF("added %u\n", added_count); insertion_ordered_map, vector> edges_by_graph; - for (const RoseInEdge &ve : edges_range(vg)) { + for (const RoseInEdge ve : edges_range(vg)) { if (vg[ve].graph && !vg[ve].dfa) { auto &h = vg[ve].graph; edges_by_graph[h].push_back(ve); diff --git a/src/rose/rose_build_add.cpp b/src/rose/rose_build_add.cpp index aa043fade..4f850ccee 100644 --- a/src/rose/rose_build_add.cpp +++ b/src/rose/rose_build_add.cpp @@ -179,7 +179,7 @@ RoseVertex duplicate(RoseBuildImpl *build, RoseVertex v) { build->literal_info[lit_id].vertices.insert(w); } - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { RoseVertex s = source(e, g); add_edge(s, w, g[e], g); DEBUG_PRINTF("added edge (%zu,%zu)\n", g[s].index, g[w].index); @@ -600,7 +600,7 @@ void doRoseLiteralVertex(RoseBuildImpl *tbi, bool use_eod_table, /* need to check if putting iv into the anchored table would create * any bad_overlap relationships with its successor literals */ - for (const auto &e : out_edges_range(iv, ig)) { + for (const auto e : out_edges_range(iv, ig)) { RoseInVertex t = target(e, ig); u32 overlap = findRoseAnchorFloatingOverlap(ig[e], ig[t]); DEBUG_PRINTF("found overlap of %u\n", overlap); @@ -650,7 +650,7 @@ unique_ptr makeRoseEodPrefix(const NGHolder &h, RoseBuildImpl &build, // Move acceptEod edges over to accept. vector dead; - for (const auto &e : in_edges_range(g.acceptEod, g)) { + for (const auto e : in_edges_range(g.acceptEod, g)) { NFAVertex u = source(e, g); if (u == g.accept) { continue; @@ -834,7 +834,7 @@ bool suitableForEod(const RoseInGraph &ig, vector topo, if (ig[v].type == RIV_ACCEPT) { DEBUG_PRINTF("[ACCEPT]\n"); - for (const auto &e : in_edges_range(v, ig)) { + for (const auto e : in_edges_range(v, ig)) { if (!ig[e].graph || !can_only_match_at_eod(*ig[e].graph)) { DEBUG_PRINTF("floating accept\n"); return false; @@ -863,7 +863,7 @@ bool suitableForEod(const RoseInGraph &ig, vector topo, return false; } - for (const auto &e : out_edges_range(v, ig)) { + for (const auto e : out_edges_range(v, ig)) { RoseInVertex t = target(e, ig); assert(contains(max_depth_from_eod, t)); @@ -976,7 +976,7 @@ void populateRoseGraph(RoseBuildImpl *tbi, RoseBuildData &bd) { } vector > parents; - for (const auto &e : in_edges_range(iv, ig)) { + for (const auto e : in_edges_range(iv, ig)) { RoseInVertex u = source(e, ig); assert(contains(vertex_map, u)); const vector &images = vertex_map[u]; @@ -1058,7 +1058,7 @@ static bool predsAreDelaySensitive(const RoseInGraph &ig, RoseInVertex v) { assert(in_degree(v, ig)); - for (const auto &e : in_edges_range(v, ig)) { + for (const auto e : in_edges_range(v, ig)) { if (ig[e].graph || ig[e].haig) { DEBUG_PRINTF("edge graph\n"); return true; @@ -1126,7 +1126,7 @@ u32 findMaxSafeDelay(const RoseInGraph &ig, RoseInVertex u, RoseInVertex v) { DEBUG_PRINTF("max safe delay for this edge: %zu\n", max_delay); // Now consider the predecessors of u. - for (const auto &e : in_edges_range(u, ig)) { + for (const auto e : in_edges_range(u, ig)) { RoseInVertex w = source(e, ig); if (ig[w].type == RIV_START) { continue; @@ -1342,7 +1342,7 @@ void transformAnchoredLiteralOverlap(RoseInGraph &ig, RoseBuildData &bd, return; } - for (const auto &e : edges_range(ig)) { + for (const auto e : edges_range(ig)) { const RoseInVertex u = source(e, ig); const RoseInVertex v = target(e, ig); @@ -1494,7 +1494,7 @@ void transformSuffixDelay(RoseInGraph &ig, const CompileContext &cc) { #ifndef NDEBUG static bool validateKinds(const RoseInGraph &g) { - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { if (g[e].graph && g[e].graph->kind != whatRoseIsThis(g, e)) { return false; } @@ -1528,7 +1528,7 @@ bool RoseBuildImpl::addRose(const RoseInGraph &ig, bool prefilter) { insertion_ordered_map> graphs; - for (const auto &e : edges_range(in)) { + for (const auto e : edges_range(in)) { if (!in[e].graph) { assert(!in[e].dfa); assert(!in[e].haig); @@ -1589,7 +1589,7 @@ bool RoseBuildImpl::addSombeRose(const RoseInGraph &ig) { RoseBuildData bd(ig, true); - for (const auto &e : edges_range(ig)) { + for (const auto e : edges_range(ig)) { if (!ig[e].graph) { continue; // no graph } @@ -1614,7 +1614,7 @@ bool roseCheckRose(const RoseInGraph &ig, bool prefilter, vector graphs; - for (const auto &e : edges_range(ig)) { + for (const auto e : edges_range(ig)) { if (!ig[e].graph) { continue; // no graph } diff --git a/src/rose/rose_build_bytecode.cpp b/src/rose/rose_build_bytecode.cpp index df464c280..01f03de1f 100644 --- a/src/rose/rose_build_bytecode.cpp +++ b/src/rose/rose_build_bytecode.cpp @@ -485,7 +485,7 @@ bool nfaStuckOn(const NGHolder &g) { set tops; set done_tops; - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { insert(&tops, g[e].tops); if (!g[target(e, g)].char_reach.all()) { continue; @@ -736,7 +736,7 @@ void findInfixTriggers(const RoseBuildImpl &build, set &triggers = (*infixTriggers)[left_id(g[v].left)]; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { RoseVertex u = source(e, g); if (build.isAnyStart(u)) { continue; @@ -1212,7 +1212,7 @@ unique_ptr constructTamaInfo(const RoseGraph &g, if (is_suffix) { tops.insert(g[v].suffix.top); } else { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { tops.insert(g[e].rose_top); } } @@ -1235,7 +1235,7 @@ void updateTops(const RoseGraph &g, const TamaInfo &tamaInfo, if (is_suffix) { tamaProto.add(n, g[v].index, g[v].suffix.top, out_top_remap); } else { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { tamaProto.add(n, g[v].index, g[e].rose_top, out_top_remap); } } @@ -2374,7 +2374,7 @@ void recordResources(RoseResources &resources, const RoseBuildImpl &build, resources.has_literals = !fragments.empty(); const auto &g = build.g; - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { if (g[v].eod_accept) { resources.has_eod = true; break; @@ -2607,7 +2607,7 @@ unordered_map assignStateIndices(const RoseBuildImpl &build) { // We only need a state index if we have successors that are not // eagerly-reported EOD vertices. bool needs_state_index = false; - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (!canEagerlyReportAtEod(build, e)) { needs_state_index = true; break; @@ -2768,7 +2768,7 @@ vector> findEdgesByLiteral(const RoseBuildImpl &build) { vector> lit_edge_map(build.literals.size()); const auto &g = build.g; - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { for (const auto &lit_id : g[v].literals) { assert(lit_id < lit_edge_map.size()); auto &edge_list = lit_edge_map.at(lit_id); @@ -3266,7 +3266,7 @@ void addEodAnchorProgram(const RoseBuildImpl &build, const build_context &bc, in_degree(v, g)); vector edge_list; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { RoseVertex u = source(e, g); if (build.isInETable(u) != in_etable) { DEBUG_PRINTF("pred %zu %s in etable\n", g[u].index, @@ -3310,7 +3310,7 @@ void addEodEventProgram(const RoseBuildImpl &build, build_context &bc, // Collect all edges leading into EOD event literal vertices. vector edge_list; for (const auto &v : lit_info.vertices) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { edge_list.push_back(e); } } diff --git a/src/rose/rose_build_castle.cpp b/src/rose/rose_build_castle.cpp index 59bab3b1f..1a81807bf 100644 --- a/src/rose/rose_build_castle.cpp +++ b/src/rose/rose_build_castle.cpp @@ -328,7 +328,7 @@ void remapCastleTops(RoseBuildImpl &tbi) { // Update the tops on the edges leading into vertices in v. for (auto v : verts) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { g[e].rose_top = top_map.at(g[e].rose_top); } } @@ -372,7 +372,7 @@ bool triggerKillsRoseCastle(const RoseBuildImpl &tbi, const left_id &left, DEBUG_PRINTF("s=%s, castle reach=%s\n", dumpString(s).c_str(), describeClass(cr).c_str()); - for (const auto &s_cr : s) { + for (const auto s_cr : s) { if (!overlaps(cr, s_cr)) { DEBUG_PRINTF("reach %s kills castle\n", describeClass(s_cr).c_str()); diff --git a/src/rose/rose_build_compile.cpp b/src/rose/rose_build_compile.cpp index 1cf3bbe69..2ac3ea672 100644 --- a/src/rose/rose_build_compile.cpp +++ b/src/rose/rose_build_compile.cpp @@ -94,7 +94,7 @@ static bool limited_explosion(const ue2_literal &s) { u32 nc_count = 0; - for (const auto &e : s) { + for (const auto e : s) { if (e.nocase) { nc_count++; } @@ -268,7 +268,7 @@ bool RoseBuildImpl::isPseudoStarOrFirstOnly(const RoseEdge &e) const { } bool RoseBuildImpl::hasOnlyPseudoStarInEdges(RoseVertex v) const { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (!isPseudoStar(e)) { return false; } @@ -369,7 +369,7 @@ RoseRoleHistory findHistoryScheme(const RoseBuildImpl &tbi, const RoseEdge &e) { static void assignHistories(RoseBuildImpl &tbi) { - for (const auto &e : edges_range(tbi.g)) { + for (const auto e : edges_range(tbi.g)) { if (tbi.g[e].history == ROSE_ROLE_HISTORY_INVALID) { tbi.g[e].history = findHistoryScheme(tbi, e); } @@ -622,7 +622,7 @@ bool promoteEodToAnchored(RoseBuildImpl &tbi, const vector &eodLiterals) { auto &eod_verts = tbi.literal_info[eod_id].vertices; for (auto v : eod_verts) { - for (const auto &e : in_edges_range(v, tbi.g)) { + for (const auto e : in_edges_range(v, tbi.g)) { assert(tbi.g[e].maxBound != ROSE_BOUND_INF); tbi.g[e].minBound += lit.s.length(); tbi.g[e].maxBound += lit.s.length(); @@ -1011,7 +1011,7 @@ void packInfixTops(NGHolder &h, RoseGraph &g, for (auto v : verts) { assert(g[v].left.graph.get() == &h); - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { u32 top = g[e].rose_top; used_tops.insert(top); } @@ -1026,13 +1026,13 @@ void packInfixTops(NGHolder &h, RoseGraph &g, for (auto v : verts) { assert(g[v].left.graph.get() == &h); - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { g[e].rose_top = top_mapping.at(g[e].rose_top); } } vector dead; - for (const auto &e : out_edges_range(h.start, h)) { + for (const auto e : out_edges_range(h.start, h)) { NFAVertex v = target(e, h); if (v == h.startDs) { continue; // stylised edge, leave it alone. @@ -1157,7 +1157,7 @@ void findTopTriggerCancels(RoseBuildImpl &build) { set pred_lit_ids; for (auto v : succs) { - for (const auto &e : in_edges_range(v, build.g)) { + for (const auto e : in_edges_range(v, build.g)) { RoseVertex u = source(e, build.g); tops_seen.insert(build.g[e].rose_top); insert(&pred_lit_ids, build.g[u].literals); @@ -1620,7 +1620,7 @@ void addAnchoredSmallBlockLiterals(RoseBuildImpl &tbi) { #ifndef NDEBUG static bool historiesAreValid(const RoseGraph &g) { - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { if (g[e].history == ROSE_ROLE_HISTORY_INVALID) { DEBUG_PRINTF("edge [%zu,%zu] has invalid history\n", g[source(e, g)].index, g[target(e, g)].index); diff --git a/src/rose/rose_build_convert.cpp b/src/rose/rose_build_convert.cpp index 33351099f..0d4a54c70 100644 --- a/src/rose/rose_build_convert.cpp +++ b/src/rose/rose_build_convert.cpp @@ -117,7 +117,7 @@ unique_ptr makeRosePrefix(const ue2_literal &s) { unique_ptr h = ue2::make_unique(NFA_PREFIX); NFAVertex u = h->startDs; - for (const auto &c : s) { + for (const auto c : s) { NFAVertex v = addHolderVertex(c, *h); add_edge(u, v, *h); u = v; @@ -628,7 +628,7 @@ void convertPrefixToBounds(RoseBuildImpl &tbi) { /* graphs with prefixes produced by rose are wired to tbi.root */ - for (const auto &e : out_edges_range(tbi.root, g)) { + for (const auto e : out_edges_range(tbi.root, g)) { RoseVertex v = target(e, g); if (in_degree(v, g) != 1) { @@ -673,7 +673,7 @@ void convertPrefixToBounds(RoseBuildImpl &tbi) { handleMixedPrefixCliche(h, g, v, e, ar, &to_delete, tbi.cc); } - for (const auto &e : out_edges_range(ar, g)) { + for (const auto e : out_edges_range(ar, g)) { RoseVertex v = target(e, g); /* note: vertices that we have rehomed will currently have an in-degree diff --git a/src/rose/rose_build_dump.cpp b/src/rose/rose_build_dump.cpp index dbc938a5c..6538875e4 100644 --- a/src/rose/rose_build_dump.cpp +++ b/src/rose/rose_build_dump.cpp @@ -441,7 +441,7 @@ void dumpRoseLiterals(const RoseBuildImpl &build, os << ", min_offset=" << g[v].min_offset; os << ", max_offset=" << g[v].max_offset << endl; // pred info - for (const auto &ie : in_edges_range(v, g)) { + for (const auto ie : in_edges_range(v, g)) { const auto &u = source(ie, g); os << " Predecessor index="; if (u == build.root) { diff --git a/src/rose/rose_build_exclusive.cpp b/src/rose/rose_build_exclusive.cpp index 6a5a710d0..4d2f0efe5 100644 --- a/src/rose/rose_build_exclusive.cpp +++ b/src/rose/rose_build_exclusive.cpp @@ -53,7 +53,7 @@ struct RoleChunk { static CharReach getReachability(const NGHolder &h) { CharReach cr; - for (const auto &v : vertices_range(h)) { + for (const auto v : vertices_range(h)) { if (!is_special(v, h)) { cr |= h[v].char_reach; } diff --git a/src/rose/rose_build_groups.cpp b/src/rose/rose_build_groups.cpp index 209889e55..699fda855 100644 --- a/src/rose/rose_build_groups.cpp +++ b/src/rose/rose_build_groups.cpp @@ -611,7 +611,7 @@ bool isGroupSquasher(const RoseBuildImpl &build, const u32 id /* literal id */, } // Out-edges must have inf max bound, + no other shenanigans */ - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].maxBound != ROSE_BOUND_INF) { return false; } @@ -650,7 +650,7 @@ bool isGroupSquasher(const RoseBuildImpl &build, const u32 id /* literal id */, // Out-edges must have inf max bound and not directly lead to another // vertex with this group, e.g. 'foobar.*foobar'. - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].maxBound != ROSE_BOUND_INF) { return false; } @@ -671,7 +671,7 @@ bool isGroupSquasher(const RoseBuildImpl &build, const u32 id /* literal id */, // In-edges must all be dot-stars with no overlap at all, as overlap // also causes history to be used. /* Different tables are already forbidden by previous checks */ - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { if (!(g[e].minBound == 0 && g[e].maxBound == ROSE_BOUND_INF)) { return false; } diff --git a/src/rose/rose_build_infix.cpp b/src/rose/rose_build_infix.cpp index 80e125423..2c083a2ed 100644 --- a/src/rose/rose_build_infix.cpp +++ b/src/rose/rose_build_infix.cpp @@ -150,7 +150,7 @@ u32 findMaxLiteralMatches(const NGHolder &h, const set &lits) { // The set of all edges in the graph is used for existence checks in // contractVertex. EdgeCache all_edges; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { all_edges.emplace(source(e, g), target(e, g)); } diff --git a/src/rose/rose_build_lookaround.cpp b/src/rose/rose_build_lookaround.cpp index d0540d79b..83c439fe8 100644 --- a/src/rose/rose_build_lookaround.cpp +++ b/src/rose/rose_build_lookaround.cpp @@ -82,7 +82,7 @@ void getForwardReach(const NGHolder &g, u32 top, map &look) { flat_set curr, next; // Consider only successors of start with the required top. - for (const auto &e : out_edges_range(g.start, g)) { + for (const auto e : out_edges_range(g.start, g)) { NFAVertex v = target(e, g); if (v == g.startDs) { continue; @@ -273,7 +273,7 @@ void findForwardReach(const RoseGraph &g, const RoseVertex v, // Non-leaf vertices can pick up a mask per successor prefix rose // engine. vector> rose_look; - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { RoseVertex t = target(e, g); if (!g[t].left) { DEBUG_PRINTF("successor %zu has no leftfix\n", g[t].index); @@ -476,7 +476,7 @@ vector findLiteralReach(const rose_literal_id &lit) { look.reserve(lit.s.length()); s32 i = 0 - lit.s.length() - lit.delay; - for (const auto &c : lit.s) { + for (const auto c : lit.s) { look.emplace_back(i, c); i++; } diff --git a/src/rose/rose_build_matchers.cpp b/src/rose/rose_build_matchers.cpp index 4fde4c441..72b934817 100644 --- a/src/rose/rose_build_matchers.cpp +++ b/src/rose/rose_build_matchers.cpp @@ -493,7 +493,7 @@ bool isNoRunsVertex(const RoseBuildImpl &build, RoseVertex u) { return false; } - for (const auto &oe : out_edges_range(u, g)) { + for (const auto oe : out_edges_range(u, g)) { RoseVertex v = target(oe, g); if (g[oe].maxBound != ROSE_BOUND_INF) { DEBUG_PRINTF("edge (%zu,%zu) has max bound\n", g[u].index, diff --git a/src/rose/rose_build_merge.cpp b/src/rose/rose_build_merge.cpp index 5066dbd57..3c76ffa48 100644 --- a/src/rose/rose_build_merge.cpp +++ b/src/rose/rose_build_merge.cpp @@ -1018,7 +1018,7 @@ bool mergeLeftfixPair(RoseBuildImpl &build, left_id &r1, left_id &r2, const shared_ptr &c = g[verts2.front()].left.castle; for (RoseVertex v : verts1) { g[v].left.castle = c; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { g[e].rose_top = top_map.at(g[e].rose_top); } } @@ -1549,7 +1549,7 @@ struct DedupeLeftKey { static flat_set> get_pred_tops(RoseVertex v, const RoseGraph &g) { flat_set> preds; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { preds.emplace(g[source(e, g)].index, g[e].rose_top); } return preds; @@ -1683,7 +1683,7 @@ u32 findUnusedTop(const flat_set &tops) { // Replace top 't' on edges with new top 'u'. static void replaceTops(NGHolder &h, const map &top_mapping) { - for (const auto &e : out_edges_range(h.start, h)) { + for (const auto e : out_edges_range(h.start, h)) { NFAVertex v = target(e, h); if (v == h.startDs) { continue; @@ -1741,7 +1741,7 @@ bool setDistinctRoseTops(RoseGraph &g, NGHolder &h1, const NGHolder &h2, DEBUG_PRINTF("vertex %zu\n", g[v].index); assert(!g[v].left.haig); assert(!g[v].left.dfa); - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { u32 t = g[e].rose_top; DEBUG_PRINTF("t=%u\n", t); assert(contains(top_mapping, t)); @@ -1843,7 +1843,7 @@ void mergeNfaLeftfixes(RoseBuildImpl &tbi, LeftfixBouquet &roses) { // back. map edge_props; for (auto v : verts2) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { edge_props[e] = g[e]; } } @@ -2009,7 +2009,7 @@ void mergeCastleChunk(RoseBuildImpl &build, vector &cands, for (auto v : verts_2) { assert(g[v].left.castle.get() == cand_2.castle()); g[v].left.castle = winner; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { g[e].rose_top = top_map.at(g[e].rose_top); } } diff --git a/src/rose/rose_build_misc.cpp b/src/rose/rose_build_misc.cpp index 0b0e689c9..f3e1cfc05 100644 --- a/src/rose/rose_build_misc.cpp +++ b/src/rose/rose_build_misc.cpp @@ -125,7 +125,7 @@ bool RoseBuildImpl::isNonRootSuccessor(const RoseVertex &v) const { } bool hasAnchHistorySucc(const RoseGraph &g, RoseVertex v) { - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].history == ROSE_ROLE_HISTORY_ANCH) { return true; } @@ -135,7 +135,7 @@ bool hasAnchHistorySucc(const RoseGraph &g, RoseVertex v) { } bool hasLastByteHistorySucc(const RoseGraph &g, RoseVertex v) { - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { if (g[e].history == ROSE_ROLE_HISTORY_LAST_BYTE) { return true; } @@ -338,7 +338,7 @@ void RoseBuildImpl::removeVertices(const vector &dead) { // those via infixes. u32 RoseBuildImpl::calcSuccMaxBound(RoseVertex u) const { u32 maxBound = 0; - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { RoseVertex v = target(e, g); if (g[v].left) { @@ -510,7 +510,7 @@ bool roseHasTops(const RoseBuildImpl &build, RoseVertex v) { set graph_tops; if (!build.isRootSuccessor(v)) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { graph_tops.insert(g[e].rose_top); } } @@ -1008,7 +1008,7 @@ bool hasOrphanedTops(const RoseBuildImpl &build) { set &tops = leftfixes[g[v].left]; if (!build.isRootSuccessor(v)) { // Tops for infixes come from the in-edges. - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { tops.insert(g[e].rose_top); } } diff --git a/src/rose/rose_build_program.cpp b/src/rose/rose_build_program.cpp index 96c95dbf0..2888e312f 100644 --- a/src/rose/rose_build_program.cpp +++ b/src/rose/rose_build_program.cpp @@ -904,7 +904,7 @@ void makeRoleGroups(const RoseGraph &g, ProgramBuild &prog_build, // intersection of the groups set by our predecessors. assert(in_degree(v, g) > 0); rose_group already_on = ~rose_group{0}; - for (const auto &u : inv_adjacent_vertices_range(v, g)) { + for (const auto u : inv_adjacent_vertices_range(v, g)) { already_on &= prog_build.vertex_group_map.at(u); } @@ -1152,7 +1152,7 @@ static really_inline void nibUpdate(map &nib, u32 hi_lo) { u16 hi = hi_lo >> 16; u16 lo = hi_lo & 0xffff; - for (const auto pairs : nib) { + for (const auto &pairs : nib) { u32 old = pairs.first; if ((old >> 16) == hi || (old & 0xffff) == lo) { if (!nib[old | hi_lo]) { @@ -1958,7 +1958,7 @@ void makeRoleInfixTriggers(const RoseBuildImpl &build, vector triggers; - for (const auto &e : out_edges_range(u, g)) { + for (const auto e : out_edges_range(u, g)) { RoseVertex v = target(e, g); if (!g[v].left) { continue; @@ -2011,7 +2011,7 @@ bool onlyAtEod(const RoseBuildImpl &tbi, RoseVertex v) { return false; } - for (const auto &e : out_edges_range(v, g)) { + for (const auto e : out_edges_range(v, g)) { RoseVertex w = target(e, g); if (!g[w].eod_accept) { return false; @@ -2049,7 +2049,7 @@ void makeRoleEagerEodReports(const RoseBuildImpl &build, RoseProgram &program) { RoseProgram eod_program; - for (const auto &e : out_edges_range(v, build.g)) { + for (const auto e : out_edges_range(v, build.g)) { if (canEagerlyReportAtEod(build, e)) { RoseProgram block; makeRoleReports(build, leftfix_info, needs_catchup, diff --git a/src/rose/rose_build_role_aliasing.cpp b/src/rose/rose_build_role_aliasing.cpp index 359550e11..03ff433ae 100644 --- a/src/rose/rose_build_role_aliasing.cpp +++ b/src/rose/rose_build_role_aliasing.cpp @@ -194,11 +194,11 @@ bool sameSuccessors(RoseVertex a, RoseVertex b, const RoseGraph &g) { set succs_a, succs_b; - for (const auto &e : out_edges_range(a, g)) { + for (const auto e : out_edges_range(a, g)) { succs_a.insert(AliasOutEdge(e, g)); } - for (const auto &e : out_edges_range(b, g)) { + for (const auto e : out_edges_range(b, g)) { succs_b.insert(AliasOutEdge(e, g)); } @@ -241,11 +241,11 @@ bool samePredecessors(RoseVertex a, RoseVertex b, const RoseGraph &g) { set preds_a, preds_b; - for (const auto &e : in_edges_range(a, g)) { + for (const auto e : in_edges_range(a, g)) { preds_a.insert(AliasInEdge(e, g)); } - for (const auto &e : in_edges_range(b, g)) { + for (const auto e : in_edges_range(b, g)) { preds_b.insert(AliasInEdge(e, g)); } @@ -258,7 +258,7 @@ bool samePredecessors(RoseVertex a, RoseVertex b, const RoseGraph &g) { return false; } - for (const auto &e_a : in_edges_range(a, g)) { + for (const auto e_a : in_edges_range(a, g)) { RoseEdge e = edge(source(e_a, g), b, g); if (!e || g[e].rose_top != g[e_a].rose_top) { DEBUG_PRINTF("bad tops\n"); @@ -273,7 +273,7 @@ bool samePredecessors(RoseVertex a, RoseVertex b, const RoseGraph &g) { static bool hasCommonSuccWithBadBounds(RoseVertex a, RoseVertex b, const RoseGraph &g) { - for (const auto &e_a : out_edges_range(a, g)) { + for (const auto e_a : out_edges_range(a, g)) { if (RoseEdge e = edge(b, target(e_a, g), g)) { if (g[e_a].maxBound < g[e].minBound || g[e].maxBound < g[e_a].minBound) { @@ -292,7 +292,7 @@ bool hasCommonSuccWithBadBounds(RoseVertex a, RoseVertex b, static bool hasCommonPredWithBadBounds(RoseVertex a, RoseVertex b, const RoseGraph &g) { - for (const auto &e_a : in_edges_range(a, g)) { + for (const auto e_a : in_edges_range(a, g)) { if (RoseEdge e = edge(source(e_a, g), b, g)) { if (g[e_a].maxBound < g[e].minBound || g[e].maxBound < g[e_a].minBound) { @@ -482,7 +482,7 @@ void mergeEdges(RoseVertex a, RoseVertex b, RoseGraph &g) { EdgeCache b_edges; // Cache b's in-edges so we can look them up by source quickly. - for (const auto &e : in_edges_range(b, g)) { + for (const auto e : in_edges_range(b, g)) { RoseVertex u = source(e, g); b_edges.emplace(u, e); } @@ -501,7 +501,7 @@ void mergeEdges(RoseVertex a, RoseVertex b, RoseGraph &g) { // Cache b's out-edges so we can look them up by target quickly. b_edges.clear(); - for (const auto &e : out_edges_range(b, g)) { + for (const auto e : out_edges_range(b, g)) { RoseVertex v = target(e, g); b_edges.emplace(v, e); } @@ -699,7 +699,7 @@ bool hasCommonPredWithDiffRoses(RoseVertex a, RoseVertex b, const bool equal_roses = hasEqualLeftfixes(a, b, g); - for (const auto &e_a : in_edges_range(a, g)) { + for (const auto e_a : in_edges_range(a, g)) { if (RoseEdge e = edge(source(e_a, g), b, g)) { DEBUG_PRINTF("common pred, e_r=%d r_t %u,%u\n", (int)equal_roses, g[e].rose_top, g[e_a].rose_top); @@ -784,7 +784,7 @@ void setReports(CastleProto &castle, ReportID report) { static void updateEdgeTops(RoseGraph &g, RoseVertex v, const map &top_map) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { g[e].rose_top = top_map.at(g[e].rose_top); } } @@ -796,7 +796,7 @@ void pruneUnusedTops(CastleProto &castle, const RoseGraph &g, for (auto v : verts) { assert(g[v].left.castle.get() == &castle); - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { u32 top = g[e].rose_top; assert(contains(castle.repeats, top)); used_tops.insert(top); @@ -827,14 +827,14 @@ void pruneUnusedTops(NGHolder &h, const RoseGraph &g, for (auto v : verts) { assert(g[v].left.graph.get() == &h); - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { u32 top = g[e].rose_top; used_tops.insert(top); } } vector dead; - for (const auto &e : out_edges_range(h.start, h)) { + for (const auto e : out_edges_range(h.start, h)) { NFAVertex v = target(e, h); if (v == h.startDs) { continue; // stylised edge, leave it alone. @@ -1068,7 +1068,7 @@ bool attemptRoseCastleMerge(RoseBuildImpl &build, bool preds_same, RoseVertex a, // Merge in the relevant repeats from b with the new report. Note that // we'll have to remap tops appropriately. map b_top_map; - for (const auto &e : in_edges_range(b, g)) { + for (const auto e : in_edges_range(b, g)) { u32 top = g[e].rose_top; assert(contains(b_castle.repeats, top)); @@ -1288,7 +1288,7 @@ bool attemptRoseGraphMerge(RoseBuildImpl &build, bool preds_same, RoseVertex a, pruneAllOtherReports(victim, new_report); map a_props; - for (const auto &e : in_edges_range(a, g)) { + for (const auto e : in_edges_range(a, g)) { a_props[source(e, g)] = g[e]; } @@ -1307,7 +1307,7 @@ bool attemptRoseGraphMerge(RoseBuildImpl &build, bool preds_same, RoseVertex a, if (!mergeNfaPair(victim, *b_h, nullptr, build.cc)) { DEBUG_PRINTF("merge failed\n"); // Restore in-edge properties. - for (const auto &e : in_edges_range(a, g)) { + for (const auto e : in_edges_range(a, g)) { g[e] = a_props[source(e, g)]; } assert(roseHasTops(build, a)); @@ -1941,7 +1941,7 @@ static bool hasNoDiamondSiblings(const RoseGraph &g, RoseVertex v) { if (has_successor(v, g)) { bool only_succ = true; - for (const auto &w : adjacent_vertices_range(v, g)) { + for (const auto w : adjacent_vertices_range(v, g)) { if (in_degree(w, g) > 1) { only_succ = false; break; @@ -1957,7 +1957,7 @@ bool hasNoDiamondSiblings(const RoseGraph &g, RoseVertex v) { assert(in_edges(v, g).first != in_edges(v, g).second); bool only_pred = true; - for (const auto &u : inv_adjacent_vertices_range(v, g)) { + for (const auto u : inv_adjacent_vertices_range(v, g)) { if (out_degree(u, g) > 1) { only_pred = false; break; @@ -2066,7 +2066,7 @@ struct DupeLeafKey { struct UncalcLeafKey { UncalcLeafKey(const RoseGraph &g, RoseVertex v) : literals(g[v].literals), rose(g[v].left) { - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { RoseVertex u = source(e, g); preds.insert(make_pair(u, g[e])); } @@ -2138,7 +2138,7 @@ void mergeDupeLeaves(RoseBuildImpl &build) { g[t].index); vector deadEdges; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { RoseVertex u = source(e, g); DEBUG_PRINTF("u index=%zu\n", g[u].index); if (RoseEdge et = edge(u, t, g)) { diff --git a/src/rose/rose_in_dump.cpp b/src/rose/rose_in_dump.cpp index 5266e9d7d..df93c8d47 100644 --- a/src/rose/rose_in_dump.cpp +++ b/src/rose/rose_in_dump.cpp @@ -99,7 +99,7 @@ void dumpPreRoseGraph(const RoseInGraph &ig, const Grey &grey, map graph_ids; - for (const auto &e : edges_range(ig)) { + for (const auto e : edges_range(ig)) { u32 u = i_map[source(e, ig)]; u32 v = i_map[target(e, ig)]; fprintf(f, "%u -> %u [label=\"", u, v); diff --git a/src/rose/rose_in_util.cpp b/src/rose/rose_in_util.cpp index 9fe47c276..93589b61e 100644 --- a/src/rose/rose_in_util.cpp +++ b/src/rose/rose_in_util.cpp @@ -98,7 +98,7 @@ unique_ptr cloneRoseGraph(const RoseInGraph &ig) { unordered_map> graph_map; unordered_map> haig_map; - for (const auto &e : edges_range(ig)) { + for (const auto e : edges_range(ig)) { const RoseInEdgeProps &ep = ig[e]; if (ep.graph && !contains(graph_map, ep.graph.get())) { graph_map[ep.graph.get()] = cloneHolder(*ep.graph); @@ -133,7 +133,7 @@ void calcVertexOffsets(RoseInGraph &g) { u32 min_d = ROSE_BOUND_INF; u32 max_d = 0; - for (const auto &e : in_edges_range(v, g)) { + for (const auto e : in_edges_range(v, g)) { RoseInVertex u = source(e, g); u32 e_min = g[u].min_offset; u32 e_max = g[u].max_offset; diff --git a/src/smallwrite/smallwrite_build.cpp b/src/smallwrite/smallwrite_build.cpp index 4eb4801db..07995c5b6 100644 --- a/src/smallwrite/smallwrite_build.cpp +++ b/src/smallwrite/smallwrite_build.cpp @@ -329,7 +329,7 @@ void SmallWriteBuildImpl::add(const NGHolder &g, const ExpressionInfo &expr) { static bool add_to_trie(const ue2_literal &literal, ReportID report, LitTrie &trie) { auto u = trie.root; - for (const auto &c : literal) { + for (const auto c : literal) { auto next = LitTrie::null_vertex(); for (auto v : adjacent_vertices_range(u, trie)) { if (trie[v].c == (u8)c.c) { diff --git a/src/util/clique.cpp b/src/util/clique.cpp index c2befea49..7ad1317e4 100644 --- a/src/util/clique.cpp +++ b/src/util/clique.cpp @@ -49,7 +49,7 @@ vector getNeighborInfo(const CliqueGraph &g, u32 id = g[cv].stateId; vector neighbor; // find neighbors for cv - for (const auto &v : adjacent_vertices_range(cv, g)) { + for (const auto v : adjacent_vertices_range(cv, g)) { if (g[v].stateId != id && contains(group, g[v].stateId)){ neighbor.push_back(g[v].stateId); DEBUG_PRINTF("Neighbor:%u\n", g[v].stateId); diff --git a/src/util/graph.h b/src/util/graph.h index 3e18dae55..c7e381790 100644 --- a/src/util/graph.h +++ b/src/util/graph.h @@ -138,7 +138,7 @@ void find_unreachable(const Graph &g, const SourceCont &sources, OutCont *out) { find_reachable(g, sources, &reachable); - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { if (!contains(reachable, v)) { out->insert(v); } @@ -186,7 +186,7 @@ bool has_parallel_edge(const Graph &g) { using vertex_descriptor = typename Graph::vertex_descriptor; ue2_unordered_set> seen; - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { auto u = source(e, g); auto v = target(e, g); if (!seen.emplace(u, v).second) { @@ -304,7 +304,7 @@ template bool hasCorrectlyNumberedEdges(const Graph &g) { auto count = num_edges(g); std::vector ids(count, false); - for (const auto &e : edges_range(g)) { + for (const auto e : edges_range(g)) { auto id = g[e].index; if (id >= count || ids[id]) { return false; // duplicate diff --git a/src/util/ue2_graph.h b/src/util/ue2_graph.h index b8e2e935d..2fe9972d0 100644 --- a/src/util/ue2_graph.h +++ b/src/util/ue2_graph.h @@ -615,13 +615,13 @@ class ue2_graph : graph_detail::graph_base { std::pair edge_impl(vertex_descriptor u, vertex_descriptor v) const { if (in_degree_impl(v) < out_degree_impl(u)) { - for (const edge_descriptor &e : in_edges_range(v, *this)) { + for (const edge_descriptor e : in_edges_range(v, *this)) { if (source_impl(e) == u) { return {e, true}; } } } else { - for (const edge_descriptor &e : out_edges_range(u, *this)) { + for (const edge_descriptor e : out_edges_range(u, *this)) { if (target_impl(e) == v) { return {e, true}; } diff --git a/src/util/ue2string.cpp b/src/util/ue2string.cpp index 50b2bbcc8..a3eba3d9c 100644 --- a/src/util/ue2string.cpp +++ b/src/util/ue2string.cpp @@ -340,7 +340,7 @@ size_t ue2_literal::hash() const { void make_nocase(ue2_literal *lit) { ue2_literal rv; - for (const auto &elem: *lit) { + for (const auto elem: *lit) { rv.push_back(elem.c, ourisalpha(elem.c)); } diff --git a/unit/internal/graph_undirected.cpp b/unit/internal/graph_undirected.cpp index 73d3e3570..736fc3254 100644 --- a/unit/internal/graph_undirected.cpp +++ b/unit/internal/graph_undirected.cpp @@ -56,7 +56,7 @@ using SimpleVertex = SimpleG::vertex_descriptor; template vector to_indices(const Range &range, const Graph &g) { vector indices; - for (const auto &elem : range) { + for (const auto elem : range) { indices.push_back(g[elem].index); } sort(indices.begin(), indices.end()); diff --git a/unit/internal/rose_build_merge.cpp b/unit/internal/rose_build_merge.cpp index 5029f0a53..de206b4a7 100644 --- a/unit/internal/rose_build_merge.cpp +++ b/unit/internal/rose_build_merge.cpp @@ -85,7 +85,7 @@ static size_t numUniqueSuffixGraphs(const RoseGraph &g) { unordered_set seen; - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { if (g[v].suffix) { assert(g[v].suffix.graph); seen.insert(g[v].suffix.graph.get()); diff --git a/util/ng_corpus_generator.cpp b/util/ng_corpus_generator.cpp index e5e8e06cd..350fb2756 100644 --- a/util/ng_corpus_generator.cpp +++ b/util/ng_corpus_generator.cpp @@ -81,12 +81,12 @@ string pathToString(const NGHolder &g, const VertexPath &p) { /** True if this graph has no non-special successors of start or startDs. */ static bool graph_is_empty(const NGHolder &g) { - for (const auto &v : adjacent_vertices_range(g.start, g)) { + for (const auto v : adjacent_vertices_range(g.start, g)) { if (!is_special(v, g)) { return false; } } - for (const auto &v : adjacent_vertices_range(g.start, g)) { + for (const auto v : adjacent_vertices_range(g.start, g)) { if (!is_special(v, g)) { return false; } @@ -144,7 +144,7 @@ void findPaths(const NGHolder &g, CorpusProperties &cProps, open.push_back(ue2::make_unique(1, g.start)); unordered_set one_way_in; - for (const auto &v : vertices_range(g)) { + for (const auto v : vertices_range(g)) { if (in_degree(v, g) <= 1) { one_way_in.insert(v); }