X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/923c96522e059639b7722b35d033d79d9b0b5590..d807ae338c20b6dae20c353a3bfa489aff3f755b:/src/mc/checker/LivenessChecker.hpp diff --git a/src/mc/checker/LivenessChecker.hpp b/src/mc/checker/LivenessChecker.hpp index 16bfff72a8..d2d34dfaa9 100644 --- a/src/mc/checker/LivenessChecker.hpp +++ b/src/mc/checker/LivenessChecker.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2007-2015. The SimGrid Team. +/* Copyright (c) 2007-2022. The SimGrid Team. * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it @@ -7,30 +7,22 @@ #ifndef SIMGRID_MC_LIVENESS_CHECKER_HPP #define SIMGRID_MC_LIVENESS_CHECKER_HPP -#include +#include "src/mc/api/State.hpp" +#include "src/mc/checker/Checker.hpp" +#include "xbt/automaton.hpp" -#include #include #include #include -#include -#include -#include -#include "src/mc/mc_state.h" -#include "src/mc/checker/Checker.hpp" - -SG_BEGIN_DECL() - -SG_END_DECL() - namespace simgrid { namespace mc { -struct XBT_PRIVATE Pair { +class XBT_PRIVATE Pair { +public: int num = 0; bool search_cycle = false; - std::shared_ptr graph_state = nullptr; /* System state included */ + std::shared_ptr graph_state = nullptr; /* System state included */ xbt_automaton_state_t automaton_state = nullptr; std::shared_ptr> atomic_propositions; int requests = 0; @@ -38,60 +30,56 @@ struct XBT_PRIVATE Pair { bool exploration_started = false; explicit Pair(unsigned long expanded_pairs); - ~Pair() = default; Pair(Pair const&) = delete; Pair& operator=(Pair const&) = delete; }; -struct XBT_PRIVATE VisitedPair { +class XBT_PRIVATE VisitedPair { +public: int num; int other_num = 0; /* Dot output for */ - std::shared_ptr graph_state = nullptr; /* System state included */ + std::shared_ptr graph_state = nullptr; /* System state included */ xbt_automaton_state_t automaton_state; std::shared_ptr> atomic_propositions; std::size_t heap_bytes_used = 0; int actors_count = 0; - VisitedPair( - int pair_num, xbt_automaton_state_t automaton_state, - std::shared_ptr> atomic_propositions, - std::shared_ptr graph_state); - ~VisitedPair() = default; + VisitedPair(int pair_num, xbt_automaton_state_t automaton_state, + std::shared_ptr> atomic_propositions, std::shared_ptr graph_state); }; class XBT_PRIVATE LivenessChecker : public Checker { public: - explicit LivenessChecker(Session& session); - ~LivenessChecker() = default; + explicit LivenessChecker(Session* session); void run() override; - RecordTrace getRecordTrace() override; - std::vector getTextualTrace() override; - void logState() override; + RecordTrace get_record_trace() override; + std::vector get_textual_trace() override; + void log_state() override; + private: - int compare(simgrid::mc::VisitedPair* state1, simgrid::mc::VisitedPair* state2); - std::shared_ptr> getPropositionValues(); - std::shared_ptr insertAcceptancePair(simgrid::mc::Pair* pair); - int insertVisitedPair(std::shared_ptr visited_pair, simgrid::mc::Pair* pair); - void showAcceptanceCycle(std::size_t depth); + std::shared_ptr> get_proposition_values() const; + std::shared_ptr insert_acceptance_pair(Pair* pair); + int insert_visited_pair(std::shared_ptr visited_pair, Pair* pair); + void show_acceptance_cycle(std::size_t depth); void replay(); - void removeAcceptancePair(int pair_num); - void purgeVisitedPairs(); + void remove_acceptance_pair(int pair_num); + void purge_visited_pairs(); void backtrack(); - std::shared_ptr newPair(Pair* pair, xbt_automaton_state_t state, std::shared_ptr> propositions); -private: + std::shared_ptr create_pair(const Pair* pair, xbt_automaton_state_t state, + std::shared_ptr> propositions); + // A stack of (application_state, automaton_state) pairs for DFS exploration: - std::list> explorationStack_; - std::list> acceptancePairs_; - std::list> visitedPairs_; - unsigned long visitedPairsCount_ = 0; - unsigned long expandedPairsCount_ = 0; - unsigned long expandedStatesCount_ = 0; - int previousPair_ = 0; - std::string previousRequest_; + std::list> exploration_stack_; + std::list> acceptance_pairs_; + std::list> visited_pairs_; + unsigned long visited_pairs_count_ = 0; + unsigned long expanded_pairs_count_ = 0; + int previous_pair_ = 0; + std::string previous_request_; }; -} -} +} // namespace mc +} // namespace simgrid #endif