const std::string& get_name() const { return name_; }
const char* get_cname() const { return name_.c_str(); }
+ void set_name(const std::string& name) { name_ = name; }
virtual void suspend();
virtual void resume();
namespace kernel {
namespace activity {
-IoImpl::IoImpl(const std::string& name, resource::StorageImpl* storage) : ActivityImpl(name), storage_(storage)
-{
- this->state_ = SIMIX_RUNNING;
-
- XBT_DEBUG("Create io impl %p", this);
-}
-
IoImpl::~IoImpl()
{
if (surf_action_ != nullptr)
XBT_DEBUG("Destroy io %p", this);
}
-IoImpl* IoImpl::start(sg_size_t size, s4u::Io::OpType type)
+IoImplPtr IoImpl::set_name(const std::string& name)
+{
+ ActivityImpl::set_name(name);
+ return this;
+}
+
+IoImplPtr IoImpl::set_type(s4u::Io::OpType type)
+{
+ type_ = type;
+ return this;
+}
+
+IoImplPtr IoImpl::set_size(sg_size_t size)
+{
+ size_ = size;
+ return this;
+}
+
+IoImplPtr IoImpl::set_storage(resource::StorageImpl* storage)
+{
+ storage_ = storage;
+ return this;
+}
+
+IoImpl* IoImpl::start()
{
- surf_action_ = storage_->io_start(size, type);
+ state_ = SIMIX_RUNNING;
+ surf_action_ = storage_->io_start(size_, type_);
surf_action_->set_data(this);
XBT_DEBUG("Create IO synchro %p %s", this, get_cname());
namespace activity {
class XBT_PUBLIC IoImpl : public ActivityImpl {
+ resource::StorageImpl* storage_ = nullptr;
+ sg_size_t size_ = 0;
+ s4u::Io::OpType type_ = s4u::Io::OpType::READ;
+ sg_size_t performed_ioops_ = 0;
+
public:
~IoImpl() override;
- explicit IoImpl(const std::string& name, resource::StorageImpl* storage);
+ IoImpl() = default;
+
+ IoImplPtr set_name(const std::string& name);
+ IoImplPtr set_size(sg_size_t size);
+ IoImplPtr set_type(s4u::Io::OpType type);
+ IoImplPtr set_storage(resource::StorageImpl* storage);
- IoImpl* start(sg_size_t size, s4u::Io::OpType type);
+ sg_size_t get_performed_ioops() { return performed_ioops_; }
+
+ IoImpl* start();
void post() override;
void finish() override;
void cancel();
double get_remaining();
- sg_size_t get_performed_ioops() { return performed_ioops_; }
- resource::StorageImpl* storage_ = nullptr;
- sg_size_t performed_ioops_ = 0;
static xbt::signal<void(IoImplPtr)> on_start;
static xbt::signal<void(IoImplPtr)> on_completion;
};
Io::Io(sg_storage_t storage, sg_size_t size, OpType type) : Activity(), storage_(storage), size_(size), type_(type)
{
Activity::set_remaining(size_);
- pimpl_ = kernel::activity::IoImplPtr(new kernel::activity::IoImpl(name_, storage_->get_impl()));
+ pimpl_ = kernel::activity::IoImplPtr(new kernel::activity::IoImpl());
}
Io* Io::start()
{
- simix::simcall([this] { boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)->start(size_, type_); });
+ simix::simcall([this] {
+ boost::static_pointer_cast<kernel::activity::IoImpl>(pimpl_)
+ ->set_name(name_)
+ ->set_storage(storage_->get_impl())
+ ->set_size(size_)
+ ->set_type(type_)
+ ->start();
+ });
state_ = State::STARTED;
return this;
}