From: Justin Viiret Date: Wed, 27 Jul 2016 01:19:58 +0000 (+1000) Subject: ng_violet: fix non-det in lookForCleanEarlySplits X-Git-Tag: v4.3.0^2~24 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c58d9d04a12cc10aba6a457cf93d6f0ad76aad74;p=thirdparty%2Fvectorscan.git ng_violet: fix non-det in lookForCleanEarlySplits --- 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)) {