- void ref();
- virtual int unref(); /**< Specify that we don't use that action anymore. Returns true if the action was destroyed and false if someone still has references on it. */
- virtual void cancel(); /**< Cancel a running action */
- virtual void recycle(){}; /**< Recycle an action */
-
- virtual void suspend(); /**< Suspend an action */
- virtual void resume(); /**< Resume a suspended action */
- virtual bool isSuspended(); /**< Return whether an action is suspended */
- virtual void setMaxDuration(double duration); /**< Set the max duration of an action*/
- virtual void setPriority(double priority); /**< Set the priority of an action */
-#ifdef HAVE_TRACING
- void setCategory(const char *category); /**< Set the category of an action */
-#endif
- virtual double getRemains(); /**< Get the remains of an action */
-#ifdef HAVE_LATENCY_BOUND_TRACKING
- int getLatencyLimited(); /**< Return 1 if action is limited by latency, 0 otherwise */
-#endif
-
-
- double getPriority() {return m_priority;};
- ActionListPtr getStateSet() {return p_stateSet;};
+private:
+ ActionList* readyActionSet_; /**< Actions in state SURF_ACTION_READY */
+ ActionList* runningActionSet_; /**< Actions in state SURF_ACTION_RUNNING */
+ ActionList* failedActionSet_; /**< Actions in state SURF_ACTION_FAILED */
+ ActionList* doneActionSet_; /**< Actions in state SURF_ACTION_DONE */
+};
+
+}
+}
+
+/************
+ * Resource *
+ ************/
+
+/** @ingroup SURF_interface
+ * @brief Resource which have a metric handled by a maxmin system
+ */
+typedef struct {
+ double peak; /**< The peak of the metric, ie its max value */
+ double scale; /**< Current availability of the metric according to the traces, in [0,1] */
+ tmgr_trace_event_t event; /**< The associated trace event associated to the metric */
+} s_surf_metric_t;
+
+namespace simgrid {
+namespace surf {
+
+/** @ingroup SURF_interface
+ * @brief SURF resource interface class
+ * @details This is the ancestor class of every resources in SimGrid, such as links, CPU or storage
+ */
+XBT_PUBLIC_CLASS Resource {
+public:
+ /**
+ * @brief Constructor of LMM Resources
+ *
+ * @param model Model associated to this Resource
+ * @param name The name of the Resource
+ * @param constraint The lmm constraint associated to this Resource if it is part of a LMM component
+ */
+ Resource(Model *model, const char *name, lmm_constraint_t constraint);
+
+ virtual ~Resource();
+
+ /** @brief Get the Model of the current Resource */
+ Model* model() const;
+
+ /** @brief Get the name of the current Resource */
+ const char* cname() const;
+
+ bool operator==(const Resource &other) const;
+
+ /**
+ * @brief Apply an event of external load event to that resource
+ *
+ * @param event What happened
+ * @param value [TODO]
+ */
+ virtual void apply_event(tmgr_trace_event_t event, double value) = 0;
+
+ /** @brief Check if the current Resource is used (if it currently serves an action) */
+ virtual bool isUsed()=0;
+
+ /** @brief Check if the current Resource is active */
+ virtual bool isOn() const;
+ /** @brief Check if the current Resource is shut down */
+ virtual bool isOff() const;
+ /** @brief Turn on the current Resource */
+ virtual void turnOn();
+ /** @brief Turn off the current Resource */
+ virtual void turnOff();