Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Add LivenessChecker::purgeVisitedPairs() method
authorGabriel Corona <gabriel.corona@loria.fr>
Wed, 30 Mar 2016 14:10:09 +0000 (16:10 +0200)
committerGabriel Corona <gabriel.corona@loria.fr>
Wed, 30 Mar 2016 14:21:58 +0000 (16:21 +0200)
src/mc/LivenessChecker.cpp
src/mc/LivenessChecker.hpp

index 3eaefe2..94a34ef 100644 (file)
@@ -287,22 +287,19 @@ int LivenessChecker::insertVisitedPair(std::shared_ptr<VisitedPair> visited_pair
   }
 
   visitedPairs_.insert(range.first, std::move(visited_pair));
+  this->purgeVisitedPairs();
+  return -1;
+}
 
-  if (visitedPairs_.size() > (std::size_t) _sg_mc_visited) {
-    int min2 = mc_stats->expanded_pairs;
-
-    std::list<std::shared_ptr<VisitedPair>>::iterator index2;
-    for (auto i = visitedPairs_.begin(); i != visitedPairs_.end(); ++i) {
-      if ((*i)->num < min2) {
-        index2 = i;
-        min2 = (*i)->num;
-      }
-    }
-
-    visitedPairs_.erase(index2);
+void LivenessChecker::purgeVisitedPairs()
+{
+  if (_sg_mc_visited != 0 && visitedPairs_.size() > (std::size_t) _sg_mc_visited) {
+    // Remove the oldest entry with a linear search:
+    visitedPairs_.erase(std::min_element(
+      visitedPairs_.begin(), visitedPairs_.end(),
+      [](std::shared_ptr<VisitedPair> const a, std::shared_ptr<VisitedPair> const& b) {
+        return a->num < b->num; } ));
   }
-
-  return -1;
 }
 
 LivenessChecker::LivenessChecker(Session& session) : Checker(session)
index 5e087dd..f94a9e1 100644 (file)
@@ -81,6 +81,7 @@ private:
   void showAcceptanceCycle(std::size_t depth);
   void replay();
   void removeAcceptancePair(int pair_num);
+  void purgeVisitedPairs();
 public:
   std::list<std::shared_ptr<VisitedPair>> acceptancePairs_;
   std::list<std::shared_ptr<Pair>> livenessStack_;