sg_size_t size_ = 0;
OpType type_ = OpType::READ;
- explicit Io(sg_storage_t storage, sg_size_t size, OpType type);
- explicit Io(sg_disk_t disk, sg_size_t size, OpType type);
+ Io();
public:
#ifndef DOXYGEN
static xbt::signal<void(Io const&)> on_start;
static xbt::signal<void(Io const&)> on_completion;
+ static IoPtr init();
Io* start() override;
Io* wait() override;
Io* wait_for(double timeout) override;
double get_remaining() const override;
sg_size_t get_performed_ioops() const;
+ IoPtr set_disk(sg_disk_t disk);
+ IoPtr set_storage(sg_storage_t storage);
+ IoPtr set_size(sg_size_t size);
+ IoPtr set_op_type(OpType type);
};
} // namespace s4u
IoPtr Disk::io_init(sg_size_t size, Io::OpType type)
{
- return IoPtr(new Io(this, size, type));
+ return Io::init()->set_disk(this)->set_size(size)->set_op_type(type);
}
IoPtr Disk::read_async(sg_size_t size)
xbt::signal<void(Io const&)> Io::on_start;
xbt::signal<void(Io const&)> Io::on_completion;
-Io::Io(sg_disk_t disk, sg_size_t size, OpType type) : disk_(disk), size_(size), type_(type)
+Io::Io()
{
- Activity::set_remaining(size_);
pimpl_ = kernel::activity::IoImplPtr(new kernel::activity::IoImpl());
}
-Io::Io(sg_storage_t storage, sg_size_t size, OpType type) : storage_(storage), size_(size), type_(type)
+IoPtr Io::init()
{
- Activity::set_remaining(size_);
- pimpl_ = kernel::activity::IoImplPtr(new kernel::activity::IoImpl());
+ return IoPtr(new Io());
}
Io* Io::start()
return this;
}
+IoPtr Io::set_disk(sg_disk_t disk)
+{
+ disk_ = disk;
+ return this;
+}
+
+IoPtr Io::set_storage(sg_storage_t storage)
+{
+ storage_ = storage;
+ return this;
+}
+
+IoPtr Io::set_size(sg_size_t size)
+{
+ size_ = size;
+ Activity::set_remaining(size_);
+ return this;
+}
+
+IoPtr Io::set_op_type(OpType type)
+{
+ type_ = type;
+ return this;
+}
+
/** @brief Returns the amount of flops that remain to be done */
double Io::get_remaining() const
{
IoPtr Storage::io_init(sg_size_t size, Io::OpType type)
{
- return IoPtr(new Io(this, size, type));
+ return Io::init()->set_storage(this)->set_size(size)->set_op_type(type);
}
IoPtr Storage::read_async(sg_size_t size)