mirror of
https://github.com/VectorCamp/vectorscan.git
synced 2025-06-28 16:41:01 +03:00
ng_violet: fix non-determinism in splitEdgesByCut
This commit is contained in:
parent
151810b4fc
commit
a8cceeeddc
@ -1127,17 +1127,18 @@ void splitEdgesByCut(NGHolder &h, RoseInGraph &vg,
|
|||||||
const vector<RoseInEdge> &to_cut,
|
const vector<RoseInEdge> &to_cut,
|
||||||
const vector<NFAEdge> &cut,
|
const vector<NFAEdge> &cut,
|
||||||
const map<NFAEdge, set<ue2_literal>> &cut_lits) {
|
const map<NFAEdge, set<ue2_literal>> &cut_lits) {
|
||||||
set<RoseInVertex> sources;
|
|
||||||
for (const RoseInEdge &ve : to_cut) {
|
|
||||||
assert(&h == &*vg[ve].graph);
|
|
||||||
sources.insert(source(ve, vg));
|
|
||||||
}
|
|
||||||
|
|
||||||
DEBUG_PRINTF("splitting %s:\n", to_string(h.kind).c_str());
|
DEBUG_PRINTF("splitting %s:\n", to_string(h.kind).c_str());
|
||||||
|
|
||||||
/* create literal vertices and connect preds */
|
/* create literal vertices and connect preds */
|
||||||
|
unordered_set<RoseInVertex> done_sources;
|
||||||
map<RoseInVertex, vector<pair<RoseInVertex, NFAVertex>>> verts_by_source;
|
map<RoseInVertex, vector<pair<RoseInVertex, NFAVertex>>> verts_by_source;
|
||||||
for (RoseInVertex src : sources) {
|
for (const RoseInEdge &ve : to_cut) {
|
||||||
|
assert(&h == &*vg[ve].graph);
|
||||||
|
RoseInVertex src = source(ve, vg);
|
||||||
|
if (!done_sources.insert(src).second) {
|
||||||
|
continue; /* already processed */
|
||||||
|
}
|
||||||
|
|
||||||
/* iterate over cut for determinism */
|
/* iterate over cut for determinism */
|
||||||
for (const auto &e : cut) {
|
for (const auto &e : cut) {
|
||||||
NFAVertex prev_v = source(e, h);
|
NFAVertex prev_v = source(e, h);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user