X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/1b211507e0c2abe5f2b7fbe56988af46d3189b51..6f8347f58430e00fabef8e6cbbf3fb94e6b8a49d:/include/simgrid/plugins/task.hpp diff --git a/include/simgrid/plugins/task.hpp b/include/simgrid/plugins/task.hpp index e9fa1afffd..87a357be43 100644 --- a/include/simgrid/plugins/task.hpp +++ b/include/simgrid/plugins/task.hpp @@ -6,6 +6,7 @@ #include #include +#include #include #include #include @@ -18,29 +19,22 @@ XBT_PUBLIC void intrusive_ptr_release(Task* o); XBT_PUBLIC void intrusive_ptr_add_ref(Task* o); class ExecTask; using ExecTaskPtr = boost::intrusive_ptr; -XBT_PUBLIC void intrusive_ptr_release(ExecTask* e); -XBT_PUBLIC void intrusive_ptr_add_ref(ExecTask* e); class CommTask; using CommTaskPtr = boost::intrusive_ptr; -XBT_PUBLIC void intrusive_ptr_release(CommTask* c); -XBT_PUBLIC void intrusive_ptr_add_ref(CommTask* c); class IoTask; using IoTaskPtr = boost::intrusive_ptr; -XBT_PUBLIC void intrusive_ptr_release(IoTask* i); -XBT_PUBLIC void intrusive_ptr_add_ref(IoTask* i); struct ExtendedAttributeActivity { static simgrid::xbt::Extension EXTENSION_ID; Task* task_; }; +class XBT_PUBLIC Token : public xbt::Extendable {}; + class Task { - static bool inited_; std::set successors_ = {}; std::map predecessors_ = {}; - void add_predecessor(Task* predecessor); - void remove_predecessor(Task* predecessor); bool ready_to_run() const; void receive(Task* source); void complete(); @@ -48,12 +42,15 @@ class Task { protected: std::string name_; double amount_; + std::shared_ptr token_ = nullptr; + std::deque>> tokens_received_; int queued_execs_ = 0; int count_ = 0; bool working_ = false; + s4u::ActivityPtr previous_activity_; s4u::ActivityPtr current_activity_; - std::vector> end_func_handlers_; - std::vector> start_func_handlers_; + xbt::signal on_this_start_; + xbt::signal on_this_end_; explicit Task(const std::string& name); virtual ~Task() = default; virtual void fire() = 0; @@ -69,12 +66,14 @@ public: void enqueue_execs(int n); void set_amount(double amount); double get_amount() const { return amount_; } + void set_token(std::shared_ptr token); + std::shared_ptr get_next_token_from(TaskPtr t); void add_successor(TaskPtr t); void remove_successor(TaskPtr t); void remove_all_successors(); const std::set& get_successors() const { return successors_; } - void on_this_start(const std::function& func); - void on_this_end(const std::function& func); + void on_this_start_cb(const std::function& func); + void on_this_end_cb(const std::function& func); int get_count() const; /** Add a callback fired before a task activity start. @@ -110,8 +109,6 @@ public: s4u::Host* get_host() const { return host_; } ExecTaskPtr set_flops(double flops); double get_flops() const { return get_amount(); } - friend void inline intrusive_ptr_release(ExecTask* e) { intrusive_ptr_release(static_cast(e)); } - friend void inline intrusive_ptr_add_ref(ExecTask* e) { intrusive_ptr_add_ref(static_cast(e)); } }; class CommTask : public Task { @@ -130,8 +127,6 @@ public: s4u::Host* get_destination() const { return destination_; } CommTaskPtr set_bytes(double bytes); double get_bytes() const { return get_amount(); } - friend void inline intrusive_ptr_release(CommTask* c) { intrusive_ptr_release(static_cast(c)); } - friend void inline intrusive_ptr_add_ref(CommTask* c) { intrusive_ptr_add_ref(static_cast(c)); } }; class IoTask : public Task { @@ -146,12 +141,9 @@ public: IoTaskPtr set_disk(s4u::Disk* disk); s4u::Disk* get_disk() const { return disk_; } IoTaskPtr set_bytes(double bytes); - double get_bytes() { return get_amount(); } + double get_bytes() const { return get_amount(); } IoTaskPtr set_op_type(s4u::Io::OpType type); - s4u::Io::OpType get_op_type() { return type_; } - - friend void inline intrusive_ptr_release(IoTask* i) { intrusive_ptr_release(static_cast(i)); } - friend void inline intrusive_ptr_add_ref(IoTask* i) { intrusive_ptr_add_ref(static_cast(i)); } + s4u::Io::OpType get_op_type() const { return type_; } }; } // namespace simgrid::plugins #endif