-extern "C" {
-XBT_PUBLIC(double) surf_get_clock();
-}
-/** \ingroup SURF_simulation
- * \brief List of hosts that have just restarted and whose autorestart process should be restarted.
- */
-XBT_PUBLIC_DATA(std::vector<sg_host_t>) host_that_restart;
-
-int XBT_PRIVATE __surf_is_absolute_file_path(const char *file_path);
-
-/**********
- * Action *
- **********/
-
-/** \ingroup SURF_models
- * \brief List of initialized models
- */
-XBT_PUBLIC_DATA(std::vector<surf_model_t>*) all_existing_models;
-
-namespace simgrid {
-namespace surf {
-
-typedef std::pair<double, simgrid::surf::Action*> heap_element_type;
-typedef boost::heap::pairing_heap<heap_element_type, boost::heap::constant_time_size<false>, boost::heap::stable<true>,
- boost::heap::compare<simgrid::xbt::HeapComparator<heap_element_type>>>
- 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)
- */
-XBT_PUBLIC_CLASS 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, boost::intrusive::list_member_hook<>, &Action::modifiedSetHook_>
- ActionLmmOptions;
- typedef boost::intrusive::list<Action, ActionLmmOptions> ActionLmmList;
-
- boost::intrusive::list_member_hook<> stateSetHook_;
- typedef boost::intrusive::member_hook<Action, boost::intrusive::list_member_hook<>, &Action::stateSetHook_>
- ActionOptions;
- typedef boost::intrusive::list<Action, ActionOptions> ActionList;
-
- enum class State {
- ready = 0, /**< Ready */
- running, /**< Running */
- failed, /**< Task Failure */
- done, /**< Completed */
- to_free, /**< Action to free in next cleanup */
- not_in_the_system /**< Not in the system anymore. Why did you ask ? */
- };
-
- enum class SuspendStates {
- not_suspended = 0, /**< Action currently not suspended **/
- suspended,
- sleeping
- };
-
- enum class Type { LATENCY = 100, MAX_DURATION, NORMAL, NOTSET };
-
- /**
- * @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 host)
- */
- Action(simgrid::surf::Model* 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 host)
- * @param var The lmm variable associated to this Action if it is part of a LMM component
- */
- Action(simgrid::surf::Model * model, double cost, bool failed, kernel::lmm::Variable* var);
-
- virtual ~Action();
-
- /**
- * @brief Mark that the action is now finished
- *
- * @param state the new [state](\ref simgrid::surf::Action::State) of the current Action
- */
- void finish(Action::State state);
-
- /** @brief Get the [state](\ref simgrid::surf::Action::State) of the current Action */
- Action::State getState() const; /**< get the state*/
- /** @brief Set the [state](\ref simgrid::surf::Action::State) of the current Action */
- virtual void setState(Action::State state);
-
- /** @brief Get the bound of the current Action */
- double getBound() const;
- /** @brief Set the bound of the current Action */
- void setBound(double bound);
-
- /** @brief Get the start time of the current action */
- double getStartTime() const { return start_; }
- /** @brief Get the finish time of the current action */
- double getFinishTime() const { return finishTime_; }
-
- /** @brief Get the user data associated to the current action */
- void* getData() const { return data_; }
- /** @brief Set the user data associated to the current action */
- void setData(void* data) { data_ = data; }
-
- /** @brief Get the cost of the current action */
- double getCost() const { return cost_; }
- /** @brief Set the cost of the current action */
- void setCost(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) {double_update(&maxDuration_, delta,sg_surf_precision);}
-
- /** @brief Update the remaining time of the current action
- * @param delta Amount to remove from the remaining time */
- void updateRemains(double delta) {double_update(&remains_, delta, sg_maxmin_precision*sg_surf_precision);}
-
- /** @brief Set the remaining time of the current action */
- void setRemains(double value) {remains_ = value;}
- /** @brief Get the remaining time of the current action after updating the resource */
- virtual double getRemains();
- /** @brief Get the remaining time of the current action without updating the resource */
- double getRemainsNoUpdate() const { return remains_; }
-
- /** @brief Set the finish time of the current action */
- void setFinishTime(double value) {finishTime_ = 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();
-
- /** @brief Cancel the current Action if running */
- virtual void cancel();
-
- /** @brief Suspend the current Action */
- virtual void suspend();
-
- /** @brief Resume the current Action */
- virtual void resume();