Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
get rid of smx_file_t
[simgrid.git] / include / simgrid / s4u / Comm.hpp
index 697f259..d409c0b 100644 (file)
@@ -30,29 +30,7 @@ public:
    * iterator on the finished Comms. */
   template <class I> static I wait_any(I first, I last)
   {
-    // Map to dynar<Synchro*>:
-    xbt_dynar_t comms = xbt_dynar_new(sizeof(simgrid::kernel::activity::ActivityImpl*), [](void*ptr){
-      intrusive_ptr_release(*(simgrid::kernel::activity::ActivityImpl**)ptr);
-    });
-    for (I iter = first; iter != last; iter++) {
-      CommPtr comm = *iter;
-      if (comm->state_ == inited)
-        comm->start();
-      xbt_assert(comm->state_ == started);
-      simgrid::kernel::activity::ActivityImpl* ptr = comm->pimpl_.get();
-      intrusive_ptr_add_ref(ptr);
-      xbt_dynar_push_as(comms, simgrid::kernel::activity::ActivityImpl*, ptr);
-    }
-    // Call the underlying simcall:
-    int idx = simcall_comm_waitany(comms, -1);
-    xbt_dynar_free(&comms);
-    // Not found:
-    if (idx == -1)
-      return last;
-    // Lift the index to the corresponding iterator:
-    auto res       = std::next(first, idx);
-    (*res)->state_ = finished;
-    return res;
+    return wait_any_for(first, last, -1);
   }
   /*! Same as wait_any, but with a timeout. If the timeout occurs, parameter last is returned.*/
   template <class I> static I wait_any_for(I first, I last, double timeout)
@@ -126,7 +104,7 @@ private:
 
   /* FIXME: expose these elements in the API */
   int detached_ = 0;
-  int (*matchFunction_)(void*, void*, smx_activity_t) = nullptr;
+  int (*matchFunction_)(void*, void*, simgrid::kernel::activity::CommImpl*) = nullptr;
   void (*cleanFunction_)(void*) = nullptr;
   void (*copyDataFunction_)(smx_activity_t, void*, size_t) = nullptr;