From a3db60900f2269864e7fdf7050fbf48b8b3065e2 Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Wed, 30 Mar 2016 16:10:09 +0200 Subject: [PATCH] [mc] Add LivenessChecker::purgeVisitedPairs() method --- src/mc/LivenessChecker.cpp | 25 +++++++++++-------------- src/mc/LivenessChecker.hpp | 1 + 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/mc/LivenessChecker.cpp b/src/mc/LivenessChecker.cpp index 3eaefe230a..94a34ef133 100644 --- a/src/mc/LivenessChecker.cpp +++ b/src/mc/LivenessChecker.cpp @@ -287,22 +287,19 @@ int LivenessChecker::insertVisitedPair(std::shared_ptr 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>::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 const a, std::shared_ptr const& b) { + return a->num < b->num; } )); } - - return -1; } LivenessChecker::LivenessChecker(Session& session) : Checker(session) diff --git a/src/mc/LivenessChecker.hpp b/src/mc/LivenessChecker.hpp index 5e087ddd00..f94a9e171b 100644 --- a/src/mc/LivenessChecker.hpp +++ b/src/mc/LivenessChecker.hpp @@ -81,6 +81,7 @@ private: void showAcceptanceCycle(std::size_t depth); void replay(); void removeAcceptancePair(int pair_num); + void purgeVisitedPairs(); public: std::list> acceptancePairs_; std::list> livenessStack_; -- 2.20.1