Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
mc_api::compare_pair() defined, it's called in insert_visited_pair()
authorEhsan Azimi <eazimi@ehsan.irisa.fr>
Tue, 8 Dec 2020 08:52:28 +0000 (09:52 +0100)
committerEhsan Azimi <eazimi@ehsan.irisa.fr>
Tue, 8 Dec 2020 08:55:47 +0000 (09:55 +0100)
src/mc/checker/LivenessChecker.cpp
src/mc/mc_api.hpp

index 77e28d2..3dc51c7 100644 (file)
@@ -173,7 +173,7 @@ int LivenessChecker::insert_visited_pair(std::shared_ptr<VisitedPair> visited_pa
     visited_pair =
         std::make_shared<VisitedPair>(pair->num, pair->automaton_state, pair->atomic_propositions, pair->graph_state);
 
-  auto range = boost::range::equal_range(visited_pairs_, visited_pair.get(), DerefAndCompareByActorsCountAndUsedHeap());
+  auto range = boost::range::equal_range(visited_pairs_, visited_pair.get(), mcapi::get().compare_pair());
 
   for (auto i = range.first; i != range.second; ++i) {
     const VisitedPair* pair_test = i->get();
index c8488ef..aeb7a31 100644 (file)
@@ -26,6 +26,14 @@ class mc_api {
 private:
   mc_api() = default;
 
+  struct DerefAndCompareByActorsCountAndUsedHeap {
+    template <class X, class Y> bool operator()(X const& a, Y const& b) const
+    {
+      return std::make_pair(a->actors_count, a->heap_bytes_used) < std::make_pair(b->actors_count, b->heap_bytes_used);
+    }
+  };
+
+
 public:
   // No copy:
   mc_api(mc_api const&) = delete;
@@ -115,6 +123,9 @@ public:
   std::vector<xbt_automaton_state_t> get_automaton_state() const;
   int compare_automaton_exp_lable(const xbt_automaton_exp_label* l, std::vector<int> const& values) const;
   void set_property_automaton(xbt_automaton_state_t const& automaton_state) const;
+  inline DerefAndCompareByActorsCountAndUsedHeap compare_pair() const {
+    return DerefAndCompareByActorsCountAndUsedHeap();
+  }
 };
 
 } // namespace mc