1 /* Copyright (c) 2015-2023. The SimGrid Team. All rights reserved. */
3 /* This program is free software; you can redistribute it and/or modify it
4 * under the terms of the license (GNU LGPL) which comes with this package. */
6 #ifndef SIMGRID_MC_TRANSITION_COMM_HPP
7 #define SIMGRID_MC_TRANSITION_COMM_HPP
9 #include "src/kernel/actor/SimcallObserver.hpp"
10 #include "src/mc/transition/Transition.hpp"
16 namespace simgrid::mc {
18 class CommRecvTransition;
19 class CommSendTransition;
20 class CommTestTransition;
22 class CommWaitTransition : public Transition {
28 friend CommRecvTransition;
29 friend CommSendTransition;
30 friend CommTestTransition;
33 CommWaitTransition(aid_t issuer, int times_considered, bool timeout_, unsigned comm_, aid_t sender_, aid_t receiver_,
35 CommWaitTransition(aid_t issuer, int times_considered, std::stringstream& stream);
36 std::string to_string(bool verbose) const override;
37 bool depends(const Transition* other) const override;
39 bool get_timeout() const { return timeout_; }
40 /** ID of the corresponding Communication object in the application, or 0 if unknown */
41 unsigned get_comm() const { return comm_; }
43 aid_t get_sender() const { return sender_; }
45 aid_t get_receiver() const { return receiver_; }
47 unsigned get_mailbox() const { return mbox_; }
49 class CommTestTransition : public Transition {
54 friend CommSendTransition;
55 friend CommRecvTransition;
58 CommTestTransition(aid_t issuer, int times_considered, unsigned comm_, aid_t sender_, aid_t receiver_,
60 CommTestTransition(aid_t issuer, int times_considered, std::stringstream& stream);
61 std::string to_string(bool verbose) const override;
62 bool depends(const Transition* other) const override;
64 /** ID of the corresponding Communication object in the application, or 0 if unknown */
65 unsigned get_comm() const { return comm_; }
67 aid_t get_sender() const { return sender_; }
69 aid_t get_receiver() const { return receiver_; }
71 unsigned get_mailbox() const { return mbox_; }
74 class CommRecvTransition : public Transition {
75 unsigned comm_; /* ID of the CommImpl or 0 if not known */
80 CommRecvTransition(aid_t issuer, int times_considered, unsigned comm_, unsigned mbox_, int tag_);
81 CommRecvTransition(aid_t issuer, int times_considered, std::stringstream& stream);
82 std::string to_string(bool verbose) const override;
83 bool depends(const Transition* other) const override;
85 /** ID of the corresponding Communication object in the application (or 0 if unknown)*/
86 unsigned get_comm() const { return comm_; }
88 unsigned get_mailbox() const { return mbox_; }
89 /** If using SMPI, the tag */
90 int get_tag() const { return tag_; }
93 class CommSendTransition : public Transition {
99 CommSendTransition(aid_t issuer, int times_considered, unsigned comm_, unsigned mbox_, int tag_);
100 CommSendTransition(aid_t issuer, int times_considered, std::stringstream& stream);
101 std::string to_string(bool verbose) const override;
102 bool depends(const Transition* other) const override;
104 /** ID of the corresponding Communication object in the application, or 0 if unknown */
105 unsigned get_comm() const { return comm_; }
107 unsigned get_mailbox() const { return mbox_; }
108 /** If using SMPI, the tag */
109 int get_tag() const { return tag_; }
112 /** Make a new transition from serialized description */
113 Transition* deserialize_transition(aid_t issuer, int times_considered, std::stringstream& stream);
115 } // namespace simgrid::mc