#ifndef SIMGRID_MC_ODPOR_REVERSIBLE_RACE_CALCULATOR_HPP
#define SIMGRID_MC_ODPOR_REVERSIBLE_RACE_CALCULATOR_HPP
-#include "src/mc/explo/udpor/EventSet.hpp"
-#include "src/mc/explo/udpor/udpor_forward.hpp"
+#include "src/mc/explo/odpor/Execution.hpp"
+#include "src/mc/explo/odpor/odpor_forward.hpp"
#include "src/mc/transition/Transition.hpp"
#include "src/mc/transition/TransitionActorJoin.hpp"
#include "src/mc/transition/TransitionAny.hpp"
* execution; indeed, the question the method answers
* is only sensible in the context of a race
*/
-struct ReversibleRaceCalculator final {
- static EventSet is_race_reversible(const Execution&, Execution::Handle e1, std::shared_ptr<Transition>);
- static EventSet is_race_reversible(const Execution&, Execution::Handle e1, std::shared_ptr<Transition>);
- static EventSet is_race_reversible(const Execution&, Execution::Handle e1, std::shared_ptr<Transition>);
- static EventSet is_race_reversible(const Execution&, Execution::Handle e1, std::shared_ptr<Transition>);
+class ReversibleRaceCalculator final {
+ static bool is_race_reversible_ActorJoin(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_BarrierAsyncLock(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_BarrierWait(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_CommRecv(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_CommSend(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_CommWait(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_CommTest(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_MutexAsyncLock(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_MutexTest(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_MutexTrylock(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_MutexUnlock(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_MutexWait(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_SemAsyncLock(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_SemUnlock(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_SemWait(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_ObjectAccess(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_Random(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_TestAny(const Execution&, Execution::EventHandle e1, const Transition* e2);
+ static bool is_race_reversible_WaitAny(const Execution&, Execution::EventHandle e1, const Transition* e2);
public:
- static EventSet is_race_reversible(const Execution&, Execution::Handle e1, Execution::Handle e2);
+ static bool is_race_reversible(const Execution&, Execution::EventHandle e1, Execution::EventHandle e2);
};
} // namespace simgrid::mc::odpor