X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c0f3756528127131a1947179f56871657a084259..c2c352c327208f8c6bbdf3eb49eb14ba46f64fdb:/include/simgrid/kernel/resource/Action.hpp diff --git a/include/simgrid/kernel/resource/Action.hpp b/include/simgrid/kernel/resource/Action.hpp index 72a9435506..475ba174f1 100644 --- a/include/simgrid/kernel/resource/Action.hpp +++ b/include/simgrid/kernel/resource/Action.hpp @@ -1,4 +1,4 @@ -/* Copyright (c) 2004-2018. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -12,6 +12,7 @@ #include #include +#include static constexpr int NO_MAX_DURATION = -1.0; @@ -41,7 +42,6 @@ public: void update(Action* action, double date, ActionHeap::Type type); void remove(Action* action); Action* pop(); - bool empty() const { return heap_type::empty(); } }; /** @details An action is a consumption on a resource (e.g.: a communication for the network). @@ -70,14 +70,14 @@ public: STARTED, /**< Currently running */ FAILED, /**< either the resource failed, or the action was canceled */ FINISHED, /**< Successfully completed */ - IGNORED /**< e.g. failure detectors, these infinite sleep actions that are put on resources which failure should be - notified */ + IGNORED /**< e.g. failure detectors: infinite sleep actions that are put on resources which failure should get + noticed */ }; enum class SuspendStates { - not_suspended = 0, /**< Action currently not suspended **/ - suspended, - sleeping + RUNNING = 0, /**< Action currently not suspended **/ + SUSPENDED, + SLEEPING }; /** @@ -98,19 +98,21 @@ public: * @param var The lmm variable associated to this Action if it is part of a LMM component */ Action(Model* model, double cost, bool failed, lmm::Variable* var); + Action(const Action&) = delete; + Action& operator=(const Action&) = delete; virtual ~Action(); /** * @brief Mark that the action is now finished * - * @param state the new [state](\ref simgrid::kernel::resource::Action::State) of the current Action + * @param state the new [state](@ref simgrid::kernel::resource::Action::State) of the current Action */ void finish(Action::State state); - /** @brief Get the [state](\ref simgrid::kernel::resource::Action::State) of the current Action */ + /** @brief Get the [state](@ref simgrid::kernel::resource::Action::State) of the current Action */ Action::State get_state() const; /**< get the state*/ - /** @brief Set the [state](\ref simgrid::kernel::resource::Action::State) of the current Action */ + /** @brief Set the [state](@ref simgrid::kernel::resource::Action::State) of the current Action */ virtual void set_state(Action::State state); /** @brief Get the bound of the current Action */ @@ -128,6 +130,11 @@ public: /** @brief Set the user data associated to the current action */ void set_data(void* data) { data_ = data; } + /** @brief Get the user data associated to the current action */ + activity::ActivityImpl* get_activity() const { return activity_; } + /** @brief Set the user data associated to the current action */ + void set_activity(activity::ActivityImpl* activity) { activity_ = activity; } + /** @brief Get the cost of the current action */ double get_cost() const { return cost_; } /** @brief Set the cost of the current action */ @@ -158,7 +165,7 @@ public: 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 */ - int unref(); + bool unref(); /** @brief Cancel the current Action if running */ virtual void cancel(); @@ -169,8 +176,10 @@ public: /** @brief Resume the current Action */ virtual void resume(); + /** @brief Returns true if the current action is suspended */ + bool is_suspended() const { return suspended_ == SuspendStates::SUSPENDED; } /** @brief Returns true if the current action is running */ - bool is_suspended(); + bool is_running() const { return suspended_ == SuspendStates::RUNNING; } /** @brief Get the maximum duration of the current action */ double get_max_duration() const { return max_duration_; } @@ -178,9 +187,9 @@ public: virtual void set_max_duration(double duration); /** @brief Get the tracing category associated to the current action */ - char* get_category() const { return category_; } + const std::string& get_category() const { return category_; } /** @brief Set the tracing category of the current Action */ - void set_category(const char* category); + void set_category(const std::string& category) { category_ = category; } /** @brief Get the priority of the current Action */ double get_priority() const { return sharing_priority_; }; @@ -193,21 +202,21 @@ public: simgrid::kernel::resource::Model* get_model() const { return model_; } -protected: - StateSet* state_set_; - private: + StateSet* state_set_; + Action::SuspendStates suspended_ = Action::SuspendStates::RUNNING; 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_time_; /**< start time */ double finish_time_ = -1; /**< finish time (may fluctuate until the task is completed) */ - char* category_ = nullptr; /**< tracing category for categorized resource utilization monitoring */ + std::string category_; /**< tracing category for categorized resource utilization monitoring */ double cost_; simgrid::kernel::resource::Model* model_; - void* data_ = nullptr; /**< for your convenience */ + void* data_ = nullptr; /**< for your convenience */ + activity::ActivityImpl* activity_ = nullptr; /* LMM */ double last_update_ = 0; @@ -228,9 +237,7 @@ public: double get_last_value() const { return last_value_; } void set_last_value(double val) { last_value_ = val; } - -protected: - Action::SuspendStates suspended_ = Action::SuspendStates::not_suspended; + void set_suspend_state(Action::SuspendStates state) { suspended_ = state; } }; } // namespace resource