+/************
+ * 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();