+ CommDetExtension()
+ {
+ const unsigned long maxpid = api::get().get_maxpid();
+
+ initial_communications_pattern.resize(maxpid);
+ incomplete_communications_pattern.resize(maxpid);
+ }
+
+ std::vector<simgrid::mc::PatternCommunicationList> initial_communications_pattern;
+ std::vector<std::vector<simgrid::mc::PatternCommunication*>> incomplete_communications_pattern;
+
+ bool initial_communications_pattern_done = false;
+ bool recv_deterministic = true;
+ bool send_deterministic = true;
+ std::string send_diff;
+ std::string recv_diff;
+
+ void restore_communications_pattern(const simgrid::mc::State* state);
+ void deterministic_comm_pattern(aid_t process, const PatternCommunication* comm, bool backtracking);
+ void get_comm_pattern(const Transition* transition, bool backtracking);
+ void complete_comm_pattern(const CommWaitTransition* transition, bool backtracking);
+ void handle_comm_pattern(const Transition* transition, bool backtracking);
+};
+simgrid::xbt::Extension<simgrid::mc::Checker, CommDetExtension> CommDetExtension::EXTENSION_ID;
+/********** State Extension ***********/
+
+class StateCommDet {
+ CommDetExtension* checker_;
+
+public:
+ std::vector<std::vector<simgrid::mc::PatternCommunication>> incomplete_comm_pattern_;
+ std::vector<unsigned> communication_indices_;
+
+ static simgrid::xbt::Extension<simgrid::mc::State, StateCommDet> EXTENSION_ID;
+ explicit StateCommDet(CommDetExtension* checker) : checker_(checker)
+ {
+ copy_incomplete_comm_pattern();
+ copy_index_comm_pattern();
+ }
+
+ void copy_incomplete_comm_pattern()
+ {
+ incomplete_comm_pattern_.clear();
+ const unsigned long maxpid = api::get().get_maxpid();
+ for (unsigned long i = 0; i < maxpid; i++) {
+ std::vector<simgrid::mc::PatternCommunication> res;
+ for (auto const& comm : checker_->incomplete_communications_pattern[i])
+ res.push_back(comm->dup());
+ incomplete_comm_pattern_.push_back(std::move(res));
+ }
+ }
+
+ void copy_index_comm_pattern()
+ {
+ communication_indices_.clear();
+ for (auto const& list_process_comm : checker_->initial_communications_pattern)
+ this->communication_indices_.push_back(list_process_comm.index_comm);
+ }
+};
+simgrid::xbt::Extension<simgrid::mc::State, StateCommDet> StateCommDet::EXTENSION_ID;