X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c1139d8e995d20f3afebc6cb69c66c155348dbdd..cf975a3147956b454a79d81f3557a13ba7800083:/include/simgrid/kernel/resource/Action.hpp diff --git a/include/simgrid/kernel/resource/Action.hpp b/include/simgrid/kernel/resource/Action.hpp index 39a2a07525..f3fa29799d 100644 --- a/include/simgrid/kernel/resource/Action.hpp +++ b/include/simgrid/kernel/resource/Action.hpp @@ -24,23 +24,20 @@ typedef boost::heap::pairing_heap>> heap_type; -/** @ingroup SURF_interface - * @brief SURF action interface class - * @details An action is an event generated by a resource (e.g.: a communication for the network) - */ +/** @details An action is a consumption on a resource (e.g.: a communication for the network) */ class XBT_PUBLIC Action { public: - boost::intrusive::list_member_hook<> modifiedSetHook_; /* Used by the lazy update to list the actions to track */ - bool isLinkedModifiedSet() const { return modifiedSetHook_.is_linked(); } - - typedef boost::intrusive::member_hook, &Action::modifiedSetHook_> - ActionLmmOptions; - typedef boost::intrusive::list ActionLmmList; - - boost::intrusive::list_member_hook<> stateSetHook_; - typedef boost::intrusive::member_hook, &Action::stateSetHook_> - ActionOptions; - typedef boost::intrusive::list ActionList; + /* Lazy update needs this Set hook to maintain a list of the tracked actions */ + boost::intrusive::list_member_hook<> modified_set_hook_; + bool isLinkedModifiedSet() const { return modified_set_hook_.is_linked(); } + typedef boost::intrusive::list< + Action, boost::intrusive::member_hook, &Action::modified_set_hook_>> + ModifiedSet; + + boost::intrusive::list_member_hook<> state_set_hook_; + typedef boost::intrusive::list< + Action, boost::intrusive::member_hook, &Action::state_set_hook_>> + StateSet; enum class State { ready = 0, /**< Ready */ @@ -66,7 +63,7 @@ public: * @param cost The cost of the Action * @param failed If the action is impossible (e.g.: execute something on a switched off host) */ - Action(simgrid::kernel::resource::Model* model, double cost, bool failed); + Action(Model* model, double cost, bool failed); /** * @brief Action constructor @@ -76,7 +73,7 @@ public: * @param failed If the action is impossible (e.g.: execute something on a switched off host) * @param var The lmm variable associated to this Action if it is part of a LMM component */ - Action(simgrid::kernel::resource::Model* model, double cost, bool failed, kernel::lmm::Variable* var); + Action(Model* model, double cost, bool failed, lmm::Variable* var); virtual ~Action(); @@ -88,54 +85,57 @@ public: void finish(Action::State state); /** @brief Get the [state](\ref simgrid::kernel::resource::Action::State) of the current Action */ - Action::State getState() const; /**< get the state*/ + Action::State get_state() const; /**< get the state*/ /** @brief Set the [state](\ref simgrid::kernel::resource::Action::State) of the current Action */ - virtual void setState(Action::State state); + virtual void set_state(Action::State state); /** @brief Get the bound of the current Action */ - double getBound() const; + double get_bound() const; /** @brief Set the bound of the current Action */ - void setBound(double bound); + void set_bound(double bound); /** @brief Get the start time of the current action */ - double getStartTime() const { return start_; } + double get_start_time() const { return start_time_; } /** @brief Get the finish time of the current action */ double getFinishTime() const { return finish_time_; } /** @brief Get the user data associated to the current action */ - void* getData() const { return data_; } + void* get_data() const { return data_; } /** @brief Set the user data associated to the current action */ - void setData(void* data) { data_ = data; } + void set_data(void* data) { data_ = data; } /** @brief Get the cost of the current action */ - double getCost() const { return cost_; } + double get_cost() const { return cost_; } /** @brief Set the cost of the current action */ - void setCost(double cost) { cost_ = cost; } + void set_cost(double cost) { cost_ = cost; } /** @brief Update the maximum duration of the current action * @param delta Amount to remove from the MaxDuration */ - void updateMaxDuration(double delta); + void update_max_duration(double delta); /** @brief Update the remaining time of the current action * @param delta Amount to remove from the remaining time */ - void updateRemains(double delta); + void update_remains(double delta); + + virtual void update_remains_lazy(double now) = 0; /** @brief Set the remaining time of the current action */ - void setRemains(double value) { remains_ = value; } + void set_remains(double value) { remains_ = value; } + /** @brief Get the remaining time of the current action after updating the resource */ - virtual double getRemains(); + virtual double get_remains(); /** @brief Get the remaining time of the current action without updating the resource */ - double getRemainsNoUpdate() const { return remains_; } + double get_remains_no_update() const { return remains_; } /** @brief Set the finish time of the current action */ - void setFinishTime(double value) { finish_time_ = value; } + void set_finish_time(double value) { finish_time_ = value; } /**@brief Add a reference to the current action (refcounting) */ void ref(); /** @brief Unref that action (and destroy it if refcount reaches 0) * @return true if the action was destroyed and false if someone still has references on it */ - virtual int unref(); + int unref(); /** @brief Cancel the current Action if running */ virtual void cancel(); @@ -150,35 +150,35 @@ public: virtual bool isSuspended(); /** @brief Get the maximum duration of the current action */ - double getMaxDuration() const { return max_duration_; } + double get_max_duration() const { return max_duration_; } /** @brief Set the maximum duration of the current Action */ - virtual void setMaxDuration(double duration); + virtual void set_max_duration(double duration); /** @brief Get the tracing category associated to the current action */ - char* getCategory() const { return category_; } + char* get_category() const { return category_; } /** @brief Set the tracing category of the current Action */ - void setCategory(const char* category); + void set_category(const char* category); /** @brief Get the priority of the current Action */ - double getPriority() const { return sharing_weight_; }; + double get_priority() const { return sharing_priority_; }; /** @brief Set the priority of the current Action */ - virtual void setSharingWeight(double priority); - void setSharingWeightNoUpdate(double weight) { sharing_weight_ = weight; } + virtual void set_priority(double priority); + void set_priority_no_update(double priority) { sharing_priority_ = priority; } /** @brief Get the state set in which the action is */ - ActionList* getStateSet() const { return state_set_; }; + StateSet* get_state_set() const { return state_set_; }; - simgrid::kernel::resource::Model* getModel() const { return model_; } + simgrid::kernel::resource::Model* get_model() const { return model_; } protected: - ActionList* state_set_; - int refcount_ = 1; + StateSet* state_set_; private: - double sharing_weight_ = 1.0; /**< priority (1.0 by default) */ + int refcount_ = 1; + double sharing_priority_ = 1.0; /**< priority (1.0 by default) */ double max_duration_ = NO_MAX_DURATION; /*< max_duration (may fluctuate until the task is completed) */ double remains_; /**< How much of that cost remains to be done in the currently running task */ - double start_; /**< start time */ + double start_time_; /**< start time */ char* category_ = nullptr; /**< tracing category for categorized resource utilization monitoring */ double finish_time_ = -1; /**< finish time : this is modified during the run and fluctuates until the task is completed */ @@ -195,7 +195,6 @@ private: boost::optional heap_handle_ = boost::none; public: - virtual void updateRemainingLazy(double now) = 0; void heapInsert(heap_type& heap, double key, Action::Type hat); void heapRemove(heap_type& heap); void heapUpdate(heap_type& heap, double key, Action::Type hat); @@ -212,9 +211,6 @@ protected: Action::SuspendStates suspended_ = Action::SuspendStates::not_suspended; }; -typedef Action::ActionList ActionList; -typedef Action::ActionLmmList ActionLmmList; -typedef Action::ActionLmmList* ActionLmmListPtr; } // namespace resource } // namespace kernel } // namespace simgrid