Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
forgot that in making Activities extendable. Should please Asan
[simgrid.git] / include / simgrid / s4u / Comm.hpp
index e45f2ae..bee49b3 100644 (file)
@@ -37,9 +37,6 @@ class XBT_PUBLIC Comm : public Activity_T<Comm> {
 
   Comm() = default;
 
-protected:
-  void complete(Activity::State state) override;
-
 public:
 #ifndef DOXYGEN
   friend Mailbox; // Factory of comms
@@ -47,6 +44,8 @@ public:
 
   ~Comm() override;
 
+  /*! Creates a communication that bypasses the mailbox mechanism. */
+  static CommPtr sendto_init();
   /*! Creates a communication beween the two given hosts, bypassing the mailbox mechanism. */
   static CommPtr sendto_init(Host* from, Host* to);
   /** Do an asynchronous communication between two arbitrary hosts.
@@ -64,7 +63,9 @@ public:
    */
   static void sendto(Host* from, Host* to, uint64_t simulated_size_in_bytes);
 
-  static xbt::signal<void(Comm const&, bool is_sender)> on_start;
+  static xbt::signal<void(Comm const&)> on_send;
+  static xbt::signal<void(Comm const&)> on_recv;
+  static xbt::signal<void(Comm const&)> on_start;
   static xbt::signal<void(Comm const&)> on_completion;
 
   /*! take a vector s4u::CommPtr and return when one of them is finished.
@@ -105,6 +106,12 @@ public:
     return detach();
   }
 
+  /** Set the source and destination of communications that bypass the mailbox mechanism */
+  CommPtr set_source(Host* from);
+  Host* get_source() const { return from_; }
+  CommPtr set_destination(Host* to);
+  Host* get_destination() const { return to_; }
+
   /** Sets the maximal communication rate (in byte/sec). Must be done before start */
   CommPtr set_rate(double rate);
 
@@ -170,6 +177,8 @@ public:
   bool is_assigned() const override { return (to_ != nullptr && from_ != nullptr) || (mailbox_ != nullptr); }
 
   CommPtr set_copy_data_callback(void (*callback)(kernel::activity::CommImpl*, void*, size_t));
+  static void copy_buffer_callback(kernel::activity::CommImpl*, void*, size_t);
+  static void copy_pointer_callback(kernel::activity::CommImpl*, void*, size_t);
 };
 } // namespace s4u
 } // namespace simgrid