From 68ae4cc7c84ae7d618519ecbb6d8a7dda2d41c22 Mon Sep 17 00:00:00 2001 From: Justin Viiret Date: Thu, 21 Jul 2016 14:22:05 +1000 Subject: [PATCH] ng_violet: det. vertex ordering in splitRoseEdge --- src/nfagraph/ng_violet.cpp | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/src/nfagraph/ng_violet.cpp b/src/nfagraph/ng_violet.cpp index 3c79dbc3..27f58d0a 100644 --- a/src/nfagraph/ng_violet.cpp +++ b/src/nfagraph/ng_violet.cpp @@ -1007,20 +1007,24 @@ bool splitRoseEdge(const NGHolder &base_graph, RoseInGraph &vg, insert(&splitter_reports, base_graph[v].reports); } - /* find the targets of each source vertex */ - map > images; + /* find the targets of each source vertex; note the use of vectors to + * preserve deterministic ordering */ + vector sources; + map> images; for (const RoseInEdge &e : ee) { RoseInVertex src = source(e, vg); RoseInVertex dest = target(e, vg); - images[src].insert(dest); + if (!contains(images, src)) { + sources.push_back(src); + } + images[src].push_back(dest); remove_edge(e, vg); } - map, vector > verts_by_image; + map, vector> verts_by_image; - for (const auto &elem : images) { - RoseInVertex u = elem.first; - const auto &image = elem.second; + for (const auto &u : sources) { + const auto &image = images[u]; if (contains(verts_by_image, image)) { for (RoseInVertex v : verts_by_image[image]) {