Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Match Io and Exec creation
authorSUTER Frederic <frederic.suter@cc.in2p3.fr>
Tue, 6 Apr 2021 10:32:18 +0000 (12:32 +0200)
committerSUTER Frederic <frederic.suter@cc.in2p3.fr>
Tue, 6 Apr 2021 10:32:24 +0000 (12:32 +0200)
include/simgrid/s4u/Io.hpp
src/kernel/activity/IoImpl.cpp
src/kernel/activity/IoImpl.hpp
src/s4u/s4u_Io.cpp

index a0108a8..6137056 100644 (file)
@@ -20,10 +20,10 @@ namespace s4u {
  */
 
 class XBT_PUBLIC Io : public Activity_T<Io> {
-#ifndef DOXYGEN
-  friend Disk;    // Factory of IOs
-#endif
-  Io();
+  friend kernel::activity::IoImpl;
+
+protected:
+  explicit Io(kernel::activity::IoImplPtr pimpl);
 
 public:
   enum class OpType { READ, WRITE };
index 80fd2f0..cdc88bf 100644 (file)
@@ -7,6 +7,7 @@
 #include "simgrid/Exception.hpp"
 #include "simgrid/kernel/resource/Action.hpp"
 #include "simgrid/s4u/Host.hpp"
+#include "simgrid/s4u/Io.hpp"
 #include "src/kernel/resource/DiskImpl.hpp"
 #include "src/mc/mc_replay.hpp"
 #include "src/simix/smx_private.hpp"
@@ -18,6 +19,11 @@ namespace simgrid {
 namespace kernel {
 namespace activity {
 
+IoImpl::IoImpl()
+{
+  piface_ = new s4u::Io(this);
+}
+
 IoImpl& IoImpl::set_timeout(double timeout)
 {
   const s4u::Host* host = get_disk()->get_host();
index 298b88b..fc4df57 100644 (file)
@@ -20,8 +20,12 @@ class XBT_PUBLIC IoImpl : public ActivityImpl_T<IoImpl> {
   s4u::Io::OpType type_           = s4u::Io::OpType::READ;
   sg_size_t performed_ioops_      = 0;
   resource::Action* timeout_detector_ = nullptr;
+  s4u::Io* piface_;
 
 public:
+  IoImpl();
+  s4u::Io* get_iface() { return piface_; }
+
   IoImpl& set_timeout(double timeout) override;
   IoImpl& set_size(sg_size_t size);
   IoImpl& set_type(s4u::Io::OpType type);
index bd2b722..8af99e8 100644 (file)
@@ -15,14 +15,15 @@ namespace s4u {
 xbt::signal<void(Io const&)> Io::on_start;
 xbt::signal<void(Io const&)> Io::on_completion;
 
-Io::Io()
+Io::Io(kernel::activity::IoImplPtr pimpl)
 {
-  pimpl_ = kernel::activity::IoImplPtr(new kernel::activity::IoImpl());
+  pimpl_ = pimpl;
 }
 
 IoPtr Io::init()
 {
- return IoPtr(new Io());
+  auto pimpl = kernel::activity::IoImplPtr(new kernel::activity::IoImpl());
+  return IoPtr(pimpl->get_iface());
 }
 
 Io* Io::start()