*/
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 };
#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"
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();
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);
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()