From c58d9d04a12cc10aba6a457cf93d6f0ad76aad74 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Wed, 27 Jul 2016 11:19:58 +1000 Subject: [PATCH] ng_violet: fix non-det in lookForCleanEarlySplits --- src/nfagraph/ng_violet.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/nfagraph/ng_violet.cpp b/src/nfagraph/ng_violet.cpp index 757582f5..26fb0ef5 100644 --- a/src/nfagraph/ng_violet.cpp +++ b/src/nfagraph/ng_violet.cpp @@ -2529,15 +2529,22 @@ bool lookForCleanSplit(const NGHolder &h, const vector &ee, static void lookForCleanEarlySplits(RoseInGraph &vg, const CompileContext &cc) { u32 gen = 0; - set prev = {getStart(vg)}; + + vector prev = {getStart(vg)}; while (gen < MAX_DESIRED_CLEAN_SPLIT_DEPTH) { - set curr; + /* collect vertices in edge order for determinism */ + vector curr; + set curr_seen; for (RoseInVertex u : prev) { - insert(&curr, adjacent_vertices(u, vg)); + for (auto v : adjacent_vertices_range(u, vg)) { + if (curr_seen.insert(v).second) { + curr.push_back(v); + } + } } - map > rightfixes; + map> rightfixes; vector ordered_graphs; for (RoseInVertex v : curr) { for (const RoseInEdge &e : out_edges_range(v, vg)) {