X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bd7d5780ee8b73efd58c83f5d6f864d0a941b3ed..95a02a8febe84fd1c2ed98c78c594a5e8a0116f7:/include/simgrid/kernel/resource/Resource.hpp diff --git a/include/simgrid/kernel/resource/Resource.hpp b/include/simgrid/kernel/resource/Resource.hpp new file mode 100644 index 0000000000..f70ea2da46 --- /dev/null +++ b/include/simgrid/kernel/resource/Resource.hpp @@ -0,0 +1,98 @@ +/* Copyright (c) 2004-2018. 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. */ + +#ifndef SIMGRID_KERNEL_RESOURCE_RESOURCE_HPP +#define SIMGRID_KERNEL_RESOURCE_RESOURCE_HPP + +#include "src/surf/surf_interface.hpp" + +namespace simgrid { +namespace kernel { +namespace resource { + +/** @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 + */ +class XBT_PUBLIC 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 std::string& name, lmm::Constraint* constraint); + + virtual ~Resource(); + + /** @brief Get the Model of the current Resource */ + Model* model() const; + + /** @brief Get the name of the current Resource */ + const std::string& getName() const; + /** @brief Get the name of the current Resource */ + const char* getCname() 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 returns the current load (in flops per second, byte per second or similar) */ + virtual double getLoad(); + + /** @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(); + +private: + std::string name_; + Model* model_; + bool isOn_ = true; + +public: /* LMM */ + /** @brief Get the lmm constraint associated to this Resource if it is part of a LMM component (or null if none) */ + kernel::lmm::Constraint* constraint() const; + +private: + kernel::lmm::Constraint* const constraint_ = nullptr; + +protected: + struct Metric { + 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 */ + }; +}; +} // namespace resource +} // namespace kernel +} // namespace simgrid + +namespace std { +template <> class hash { +public: + std::size_t operator()(const simgrid::kernel::resource::Resource& r) const + { + return (std::size_t)xbt_str_hash(r.getCname()); + } +}; +} // namespace std + +#endif