Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Merge branch 'master' of https://framagit.org/simgrid/simgrid into CRTP
[simgrid.git] / include / simgrid / s4u / Comm.hpp
index 91f2ab2..7cb8725 100644 (file)
@@ -18,8 +18,8 @@ namespace s4u {
  *
  * Represents all asynchronous communications, that you can test or wait onto.
  */
-class XBT_PUBLIC Comm : public Activity {
-  MailboxPtr mailbox_                 = nullptr;
+class XBT_PUBLIC Comm : public Activity_T<Comm> {
+  Mailbox* mailbox_                   = nullptr;
   kernel::actor::ActorImpl* sender_   = nullptr;
   kernel::actor::ActorImpl* receiver_ = nullptr;
   double rate_                        = -1;
@@ -35,18 +35,18 @@ class XBT_PUBLIC Comm : public Activity {
   void (*clean_fun_)(void*)                                               = nullptr;
   void (*copy_data_function_)(kernel::activity::CommImpl*, void*, size_t) = nullptr;
 
-  Comm() : Activity() {}
+  Comm() = default;
 
 public:
-  friend XBT_PUBLIC void intrusive_ptr_release(simgrid::s4u::Comm * c);
-  friend XBT_PUBLIC void intrusive_ptr_add_ref(simgrid::s4u::Comm * c);
-  friend simgrid::s4u::Mailbox; // Factory of comms
+  friend XBT_PUBLIC void intrusive_ptr_release(Comm* c);
+  friend XBT_PUBLIC void intrusive_ptr_add_ref(Comm* c);
+  friend Mailbox; // Factory of comms
 
   virtual ~Comm();
 
-  static xbt::signal<void(ActorPtr)> on_sender_start;
-  static xbt::signal<void(ActorPtr)> on_receiver_start;
-  static xbt::signal<void(ActorPtr)> on_completion;
+  static xbt::signal<void(Actor const&)> on_sender_start;
+  static xbt::signal<void(Actor const&)> on_receiver_start;
+  static xbt::signal<void(Actor const&)> on_completion;
 
   /*! take a vector s4u::CommPtr and return when one of them is finished.
    * The return value is the rank of the first finished CommPtr. */
@@ -112,10 +112,12 @@ public:
   CommPtr set_dst_data(void** buff, size_t size);
 
   /** Retrieve the mailbox on which this comm acts */
-  MailboxPtr get_mailbox();
+  Mailbox* get_mailbox();
   /** Retrieve the size of the received data. Not to be mixed with @ref Activity::set_remaining()  */
   size_t get_dst_data_size();
 
+  s4u::ActorPtr get_sender();
+
 #ifndef DOXYGEN
   XBT_ATTRIB_DEPRECATED_v324("Please use Comm::wait_for()") void wait(double t) override { wait_for(t); }
   XBT_ATTRIB_DEPRECATED_v323("Please use Comm::set_rate()") Activity* setRate(double rate)
@@ -146,7 +148,7 @@ public:
   {
     return get_dst_data_size();
   }
-  XBT_ATTRIB_DEPRECATED_v323("Please use Comm::get_mailbox()") MailboxPtr getMailbox() { return get_mailbox(); }
+  XBT_ATTRIB_DEPRECATED_v323("Please use Comm::get_mailbox()") Mailbox* getMailbox() { return get_mailbox(); }
 #endif
 };
 } // namespace s4u