/** Removes all Report IDs bar the given one from vertices connected to accept, * and then prunes useless vertices that have had their report sets reduced to * empty. */ void pruneAllOtherReports(NGHolder &g, ReportID report) { set<NFAEdge> dead; for (const auto &e : in_edges_range(g.accept, g)) { NFAVertex u = source(e, g); auto &reports = g[u].reports; if (contains(reports, report)) { reports.clear(); reports.insert(report); } else { reports.clear(); dead.insert(e); } } for (const auto &e : in_edges_range(g.acceptEod, g)) { NFAVertex u = source(e, g); if (u == g.accept) { continue; } auto &reports = g[u].reports; if (contains(reports, report)) { reports.clear(); reports.insert(report); } else { reports.clear(); dead.insert(e); } } if (dead.empty()) { return; } remove_edges(dead, g); pruneUnreachable(g); g.renumberVertices(); g.renumberEdges(); }
bool inputTransformInplace(IMutableHypergraph<Arc>& hg, int) const { pruneUnreachable(hg, pruneOptions); return true; }