Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Fix MC with the class-hierarchification of simgrid::simix::Synchro
[simgrid.git] / src / mc / mc_state.h
index fbff700..1e47840 100644 (file)
 
 #include <simgrid_config.h>
 #include "src/simix/smx_private.h"
+#include "src/simix/SynchroIo.hpp"
+#include "src/simix/SynchroComm.hpp"
+#include "src/simix/SynchroRaw.hpp"
+#include "src/simix/SynchroSleep.hpp"
+#include "src/simix/SynchroExec.hpp"
 #include "src/mc/mc_snapshot.h"
 #include "src/mc/mc_record.h"
+#include "src/mc/Transition.hpp"
 
 namespace simgrid {
 namespace mc {
 
-extern XBT_PRIVATE std::unique_ptr<s_mc_global_t> initial_global_state;
+enum class PatternCommunicationType {
+  none = 0,
+  send = 1,
+  receive = 2,
+};
 
 struct PatternCommunication {
   int num = 0;
   smx_synchro_t comm_addr;
-  e_smx_comm_type_t type = SIMIX_COMM_SEND;
+  PatternCommunicationType type = PatternCommunicationType::send;
   unsigned long src_proc = 0;
   unsigned long dst_proc = 0;
   const char *src_host = nullptr;
@@ -110,19 +120,11 @@ struct XBT_PRIVATE State {
   /** Sequential state number (used for debugging) */
   int num = 0;
 
-  /* Which transition was executed for this simcall
-   *
-   * Some simcalls can lead to different transitions:
-   *
-   * * waitany/testany can trigger on different messages;
-   *
-   * * random can produce different values.
-   */
-  int req_num = 0;
-
   /** State's exploration status by process */
   std::vector<ProcessState> processStates;
 
+  Transition transition;
+
   /** The simcall which was executed */
   s_smx_simcall_t executed_req;
 
@@ -134,7 +136,7 @@ struct XBT_PRIVATE State {
   s_smx_simcall_t internal_req;
 
   /* Can be used as a copy of the remote synchro object */
-  s_smx_synchro_t internal_comm;
+  simgrid::mc::Remote<simgrid::simix::Comm> internal_comm;
 
   /** Snapshot of system state (if needed) */
   std::shared_ptr<simgrid::mc::Snapshot> system_state;
@@ -150,15 +152,13 @@ struct XBT_PRIVATE State {
   {
     this->processStates[process->pid].interleave();
   }
-  RecordTraceElement getRecordElement() const;
+  Transition getTransition() const;
 };
 
-XBT_PRIVATE void replay(std::list<std::unique_ptr<simgrid::mc::State>> const& stack);
-
 }
 }
 
-XBT_PRIVATE simgrid::mc::State* MC_state_new(void);
+XBT_PRIVATE simgrid::mc::State* MC_state_new(unsigned long state_number);
 XBT_PRIVATE smx_simcall_t MC_state_get_request(simgrid::mc::State* state);
 
 #endif