+#ifndef DOXYGEN
+ friend kernel::activity::IoImpl;
+ friend kernel::EngineImpl;
+#endif
+
+ inline static xbt::signal<void(Io const&)> on_start;
+ xbt::signal<void(Io const&)> on_this_start;
+
+protected:
+ explicit Io(kernel::activity::IoImplPtr pimpl);
+ Io* do_start() override;
+ void fire_on_completion() const override { on_completion(*this); }
+ void fire_on_this_completion() const override { on_this_completion(*this); }
+ void fire_on_veto() const override { on_veto(const_cast<Io&>(*this)); }
+ void fire_on_suspend() const override { on_suspend(*this); }
+ void fire_on_resume() const override { on_resume(*this); }
+