From 546e8b5fe7063caf0140d753d8c20614cbeae723 Mon Sep 17 00:00:00 2001 From: Clifford Wolf Date: Fri, 7 Nov 2014 15:21:03 +0100 Subject: Improved TopoSort determinism --- kernel/rtlil.h | 2 +- kernel/utils.h | 16 ++++++++-------- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'kernel') diff --git a/kernel/rtlil.h b/kernel/rtlil.h index 8a4d348be..0bb1e4e84 100644 --- a/kernel/rtlil.h +++ b/kernel/rtlil.h @@ -216,7 +216,7 @@ namespace RTLIL // set has an influence on the algorithm. template struct compare_ptr_by_name { - bool operator()(const T *a, const T *b) { + bool operator()(const T *a, const T *b) const { return (a == nullptr || b == nullptr) ? (a < b) : (a->name < b->name); } }; diff --git a/kernel/utils.h b/kernel/utils.h index 1779a9afc..479effdc9 100644 --- a/kernel/utils.h +++ b/kernel/utils.h @@ -128,12 +128,12 @@ public: // A simple class for topological sorting // ------------------------------------------------ -template +template> struct TopoSort { bool analyze_loops, found_loops; - std::map> database; - std::set> loops; + std::map, C> database; + std::set> loops; std::vector sorted; TopoSort() @@ -145,7 +145,7 @@ struct TopoSort void node(T n) { if (database.count(n) == 0) - database[n] = std::set(); + database[n] = std::set(); } void edge(T left, T right) @@ -154,12 +154,12 @@ struct TopoSort database[right].insert(left); } - void sort_worker(const T &n, std::set &marked_cells, std::set &active_cells, std::vector &active_stack) + void sort_worker(const T &n, std::set &marked_cells, std::set &active_cells, std::vector &active_stack) { if (active_cells.count(n)) { found_loops = true; if (analyze_loops) { - std::set loop; + std::set loop; for (int i = GetSize(active_stack)-1; i >= 0; i--) { loop.insert(active_stack[i]); if (active_stack[i] == n) @@ -197,8 +197,8 @@ struct TopoSort sorted.clear(); found_loops = false; - std::set marked_cells; - std::set active_cells; + std::set marked_cells; + std::set active_cells; std::vector active_stack; for (auto &it : database) -- cgit v1.2.3