-private:
- lmm_constraint_t p_constraint;
-};
-
-/**********
- * Action *
- **********/
-void surf_action_lmm_update_index_heap(void *action, int i);
-
-/** @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)
- */
-XBT_PUBLIC_CLASS Action : public actionHook, public actionLmmHook {
-private:
- /**
- * @brief Common initializations for the constructors
- */
- void initialize(ModelPtr model, double cost, bool failed,
- lmm_variable_t var = NULL);
-
-public:
- /**
- * @brief Action constructor
- *
- * @param model The Model associated to this Action
- * @param cost The cost of the Action
- * @param failed If the action is impossible (e.g.: execute something on a switched off workstation)
- */
- Action(ModelPtr model, double cost, bool failed);
-
- /**
- * @brief Action constructor
- *
- * @param model The Model associated to this Action
- * @param cost The cost of the Action
- * @param failed If the action is impossible (e.g.: execute something on a switched off workstation)
- * @param var The lmm variable associated to this Action if it is part of a LMM component
- */
- Action(ModelPtr model, double cost, bool failed, lmm_variable_t var);
-
- /**
- * @brief Action destructor
- */
- virtual ~Action();
-
- /**
- * @brief Finish the action
- */
- void finish();
-
- /**
- * @brief Get the [state](\ref e_surf_action_state_t) of the current Action
- *
- * @return The state of the current Action
- */
- e_surf_action_state_t getState(); /**< get the state*/
-
- /**
- * @brief Set the [state](\ref e_surf_action_state_t) of the current Action
- *
- * @param state The new state of the current Action
- */
- virtual void setState(e_surf_action_state_t state);
-
- /**
- * @brief Get the bound of the current Action
- *
- * @return The bound of the current Action
- */
- double getBound();
-
- /**
- * @brief Set the bound of the current Action
- *
- * @param bound The new bound of the current Action
- */
- void setBound(double bound);
-
- /**
- * @brief Get the start time of the current action
- *
- * @return The start time of the current action
- */
- double getStartTime();
-
- /**
- * @brief Get the finish time of the current action
- *
- * @return The finish time of the current action
- */
- double getFinishTime();
-
- /**
- * @brief Get the data associated to the current action
- *
- * @return The data associated to the current action
- */
- void *getData() {return p_data;}
-
- /**
- * @brief Set the data associated to the current action
- *
- * @param data The new data associated to the current action
- */
- void setData(void* data);
-
- /**
- * @brief Get the maximum duration of the current action
- *
- * @return The maximum duration of the current action
- */
- double getMaxDuration() {return m_maxDuration;}
-
- /**
- * @brief Get the category associated to the current action
- *
- * @return The category associated to the current action
- */
- char *getCategory() {return p_category;}
-
- /**
- * @brief Get the cost of the current action
- *
- * @return The cost of the current action
- */
- double getCost() {return m_cost;}
-
- /**
- * @brief Set the cost of the current action
- *
- * @param cost The new cost of the current action
- */
- void setCost(double cost) {m_cost = cost;}
-
- /**
- * @brief Update the maximum duration of the current action
- *
- * @param delta [TODO]
- */
- void updateMaxDuration(double delta) {double_update(&m_maxDuration, delta,sg_surf_precision);}
-
- /**
- * @brief Update the remaining time of the current action
- *
- * @param delta [TODO]
- */
- void updateRemains(double delta) {double_update(&m_remains, delta, sg_maxmin_precision*sg_surf_precision);}
-
- /**
- * @brief Set the remaining time of the current action
- *
- * @param value The new remaining time of the current action
- */
- void setRemains(double value) {m_remains = value;}
-
- /**
- * @brief Set the finish time of the current action
- *
- * @param value The new Finush time of the current action
- */
- void setFinishTime(double value) {m_finish = value;}
-
- /**
- * @brief Add a reference to the current action
- */
- void ref();
-
- /**
- * @brief Remove a reference to the current action
- * @details If the Action has no more reference, we destroy it
- *
- * @return true if the action was destroyed and false if someone still has references on it
- */
- virtual int unref();
-
- /**
- * @brief Cancel the current Action if running
- */
- virtual void cancel();
-
- /**
- * @brief Recycle an Action
- */
- virtual void recycle(){};
-
- /**
- * @brief Suspend the current Action
- */
- virtual void suspend();
-
- /**
- * @brief Resume the current Action
- */
- virtual void resume();
-
- /**
- * @brief Check if the current action is running
- *
- * @return true if the current Action is suspended, false otherwise
- */
- virtual bool isSuspended();
-
- /**
- * @brief Set the maximum duration of the current Action
- *
- * @param duration The new maximum duration of the current Action
- */
- virtual void setMaxDuration(double duration);
-
- /**
- * @brief Set the priority of the current Action
- *
- * @param priority The new priority of the current Action
- */
- virtual void setPriority(double priority);
-
-#ifdef HAVE_TRACING
- /**
- * @brief Set the category of the current Action
- *
- * @param category The new category of the current Action
- */
- void setCategory(const char *category);
-#endif
-
- /**
- * @brief Get the remaining time of the current action after updating the resource
- *
- * @return The remaining time
- */
- virtual double getRemains();
-
- /**
- * @brief Get the remaining time of the current action without updating the resource
- *
- * @return The remaining time
- */
- double getRemainsNoUpdate();
-
- /**
- * @brief Get the priority of the current Action
- *
- * @return The priority of the current Action
- */
- double getPriority() {return m_priority;};
-
- /**
- * @brief Get the state set in which the action is
- * @details [TODO]
- *
- * @return The state set in which the action is
- */
- ActionListPtr getStateSet() {return p_stateSet;};
-
- s_xbt_swag_hookup_t p_stateHookup;
-
- ModelPtr getModel() {return p_model;}
-
-protected:
- ActionListPtr p_stateSet;
- double m_priority; /**< priority (1.0 by default) */
- int m_refcount;
- double m_remains; /**< How much of that cost remains to be done in the currently running task */
- double m_maxDuration; /*< max_duration (may fluctuate until the task is completed) */
- double m_finish; /**< finish time : this is modified during the run and fluctuates until the task is completed */
-
-private:
- int resourceUsed(void *resource_id);
-
- /**
- * @brief Share the resources to the actions
- * @details [TODO]
- *
- * @param now [TODO]
- * @return in how much time the next action may terminatedescription]
- */
- double shareResources(double now);
-
- /**
- * @brief Update the current action state
- * @details [TODO]
- *
- * @param now [TODO]
- * @param delta [TODO]
- */
- void updateActionsState(double now, double delta);
-
- /**
- * @brief Update the [TODO]
- * @details [TODO]
- *
- * @param id [TODO]
- * @param event_type [TODO]
- * @param value [TODO]
- * @param time [TODO]
- */
- void updateResourceState(void *id, tmgr_trace_event_t event_type,
- double value, double time);
-
- ActionLmmListPtr p_modifiedSet;
- xbt_heap_t p_actionHeap;
- int m_selectiveUpdate;
- bool m_failed;
- double m_start; /**< start time */
- char *p_category; /**< tracing category for categorized resource utilization monitoring */
-
- #ifdef HAVE_LATENCY_BOUND_TRACKING
- int m_latencyLimited; /**< Set to 1 if is limited by latency, 0 otherwise */
- #endif
- double m_cost;
- ModelPtr p_model;
- void *p_data; /**< for your convenience */
-
- /* LMM */
-public:
- virtual void updateRemainingLazy(double now);
- void heapInsert(xbt_heap_t heap, double key, enum heap_action_type hat);
- void heapRemove(xbt_heap_t heap);
- void updateIndexHeap(int i);
- lmm_variable_t getVariable() {return p_variable;}
- double getLastUpdate() {return m_lastUpdate;}
- void refreshLastUpdate() {m_lastUpdate = surf_get_clock();}
- enum heap_action_type getHat() {return m_hat;}
- bool is_linked() {return actionLmmHook::is_linked();}
- void gapRemove();
-