X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/9f9eacbd59910b9bce3a39e41ce1d966f9a60c4c..32b3e5cb6df162ff15a79a6f82070c23e727c920:/src/mc/mc_api.hpp?ds=sidebyside diff --git a/src/mc/mc_api.hpp b/src/mc/mc_api.hpp index 234a59582d..27618ae8d2 100644 --- a/src/mc/mc_api.hpp +++ b/src/mc/mc_api.hpp @@ -8,6 +8,8 @@ #include "src/mc/mc_forward.hpp" #include "src/mc/mc_request.hpp" #include "src/mc/mc_state.hpp" +#include "src/mc/mc_record.hpp" +#include "xbt/automaton.hpp" #include "xbt/base.h" namespace simgrid { @@ -25,6 +27,14 @@ class mc_api { private: mc_api() = default; + struct DerefAndCompareByActorsCountAndUsedHeap { + template bool operator()(X const& a, Y const& b) const + { + return std::make_pair(a->actors_count, a->heap_bytes_used) < std::make_pair(b->actors_count, b->heap_bytes_used); + } + }; + + public: // No copy: mc_api(mc_api const&) = delete; @@ -45,18 +55,21 @@ public: int get_actors_size() const; // COMMUNICATION APIs - void copy_incomplete_comm_pattern(simgrid::mc::State* state) const; - void copy_index_comm_pattern(simgrid::mc::State* state) const; + bool comm_addr_equal(const kernel::activity::CommImpl* comm_addr1, const kernel::activity::CommImpl* comm_addr2) const; kernel::activity::CommImpl* get_comm_isend_raw_addr(smx_simcall_t request) const; + kernel::activity::CommImpl* get_comm_wait_raw_addr(smx_simcall_t request) const; + kernel::activity::CommImpl* get_comm_waitany_raw_addr(smx_simcall_t request, int value) const; std::string get_pattern_comm_rdv(void* addr) const; unsigned long get_pattern_comm_src_proc(void* addr) const; unsigned long get_pattern_comm_dst_proc(void* addr) const; std::vector get_pattern_comm_data(void* addr) const; - std::vector get_pattern_comm_data(mc::RemotePtr const& comm_addr) const; + std::vector get_pattern_comm_data(const kernel::activity::CommImpl* comm_addr) const; const char* get_actor_host_name(smx_actor_t actor) const; +#if HAVE_SMPI bool check_send_request_detached(smx_simcall_t const& simcall) const; - smx_actor_t get_src_actor(mc::RemotePtr const& comm_addr) const; - smx_actor_t get_dst_actor(mc::RemotePtr const& comm_addr) const; +#endif + smx_actor_t get_src_actor(const kernel::activity::CommImpl* comm_addr) const; + smx_actor_t get_dst_actor(const kernel::activity::CommImpl* comm_addr) const; // REMOTE APIs std::size_t get_remote_heap_bytes() const; @@ -71,12 +84,13 @@ public: void mc_show_deadlock() const; bool mc_is_null() const; Checker* mc_get_checker() const; + void set_checker(Checker* const checker) const; RemoteSimulation& mc_get_remote_simulation() const; void handle_simcall(Transition const& transition) const; void mc_wait_for_requests() const; - void mc_exit(int status) const; + XBT_ATTRIB_NORETURN void mc_exit(int status) const; std::string const& mc_get_host_name(std::string const& hostname) const; - void mc_dump_record_path() const; + void dump_record_path() const; smx_simcall_t mc_state_choose_request(simgrid::mc::State* state) const; // SIMCALL APIs @@ -85,9 +99,9 @@ public: std::string request_get_dot_output(smx_simcall_t req, int value) const; const char *simcall_get_name(simgrid::simix::Simcall kind) const; smx_actor_t simcall_get_issuer(s_smx_simcall const* req) const; - #if HAVE_SMPI +#if HAVE_SMPI int get_smpi_request_tag(smx_simcall_t const& simcall, simgrid::simix::Simcall type) const; - #endif +#endif // STATE APIs void restore_state(std::shared_ptr system_state) const; @@ -99,12 +113,34 @@ public: simgrid::mc::Snapshot* take_snapshot(int num_state) const; // SESSION APIs - void s_initialize() const; + void session_initialize() const; void s_close() const; - void execute(Transition const& transition); + void execute(Transition const& transition) const; + + // AUTOMATION APIs + #if SIMGRID_HAVE_MC + void automaton_load(const char *file) const; + #endif + std::vector automaton_propositional_symbol_evaluate() const; + std::vector get_automaton_state() const; + int compare_automaton_exp_label(const xbt_automaton_exp_label* l, std::vector const& values) const; + void set_property_automaton(xbt_automaton_state_t const& automaton_state) const; + inline DerefAndCompareByActorsCountAndUsedHeap compare_pair() const { + return DerefAndCompareByActorsCountAndUsedHeap(); + } + inline int automaton_state_compare(const_xbt_automaton_state_t const& s1, const_xbt_automaton_state_t const& s2) const { + return xbt_automaton_state_compare(s1, s2); + } + xbt_automaton_exp_label_t get_automaton_transition_label(xbt_dynar_t const& dynar, int index) const; + xbt_automaton_state_t get_automaton_transition_dst(xbt_dynar_t const& dynar, int index) const; + + // DYNAR APIs + inline unsigned long get_dynar_length(const_xbt_dynar_t const& dynar) const { + return xbt_dynar_length(dynar); + } }; } // namespace mc } // namespace simgrid -#endif \ No newline at end of file +#endif