X-Git-Url: http://bilbo.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/c42c3c97876bd0289e7e8560214c90ce6a175eec..8d62bb541920e2e4e0f7d1fa26a7f6eec79370c2:/src/simgrid/module.hpp?ds=sidebyside diff --git a/src/simgrid/module.hpp b/src/simgrid/module.hpp index 8d077e1e90..771fe09c92 100644 --- a/src/simgrid/module.hpp +++ b/src/simgrid/module.hpp @@ -19,21 +19,27 @@ struct Module { const char* description_; std::function init; Module(const char* id, const char* desc, std::function init_fun) - : name_(id), description_(desc), init(init_fun) + : name_(id), description_(desc), init(std::move(init_fun)) { } }; class ModuleGroup { std::vector table_; - std::string kind_; // either 'plugin' or 'CPU model' or whatever. Used in error messages only + const std::string kind_; // either 'plugin' or 'CPU model' or whatever. Used in error messages only + std::string opt_name_; + public: - ModuleGroup(std::string kind) : kind_(kind) {} + explicit ModuleGroup(const std::string& kind) : kind_(kind) {} ModuleGroup& add(const char* id, const char* desc, std::function init); Module const& by_name(const std::string& name) const; void help() const; + const std::string& get_kind() const { return kind_; } std::string existing_values() const; + void create_flag(const std::string& opt_name, const std::string& descr, const std::string& default_value, + bool init_now); + void init_from_flag_value() const; }; }; // namespace simgrid @@ -43,7 +49,6 @@ public: { \ simgrid_plugins().add(_XBT_STRINGIFY(id), (desc), (init)); \ } - /** @brief The list of all available plugins */ inline auto& simgrid_plugins() // Function to avoid static initialization order fiasco { @@ -51,4 +56,54 @@ inline auto& simgrid_plugins() // Function to avoid static initialization order return plugins; } -#endif \ No newline at end of file +#define SIMGRID_REGISTER_NETWORK_MODEL(id, desc, init) \ + static void XBT_ATTRIB_CONSTRUCTOR(800) _XBT_CONCAT3(simgrid_, id, _network_model_register)() \ + { \ + simgrid_network_models().add(_XBT_STRINGIFY(id), (desc), (init)); \ + } +/** @brief The list of all available network models (pick one with --cfg=network/model) */ +inline auto& simgrid_network_models() // Function to avoid static initialization order fiasco +{ + static simgrid::ModuleGroup models("network model"); + return models; +} + +#define SIMGRID_REGISTER_CPU_MODEL(id, desc, init) \ + static void XBT_ATTRIB_CONSTRUCTOR(800) _XBT_CONCAT3(simgrid_, id, _cpu_model_register)() \ + { \ + simgrid_cpu_models().add(_XBT_STRINGIFY(id), (desc), (init)); \ + } +/** @brief The list of all available CPU models (pick one with --cfg=cpu/model) */ +inline auto& simgrid_cpu_models() // Function to avoid static initialization order fiasco +{ + static simgrid::ModuleGroup models("CPU model"); + return models; +} + +#define SIMGRID_REGISTER_DISK_MODEL(id, desc, init) \ + static void XBT_ATTRIB_CONSTRUCTOR(800) _XBT_CONCAT3(simgrid_, id, _disk_model_register)() \ + { \ + simgrid_disk_models().add(_XBT_STRINGIFY(id), (desc), (init)); \ + } +/** @brief The list of all available disk models (pick one with --cfg=disk/model) */ +inline auto& simgrid_disk_models() // Function to avoid static initialization order fiasco +{ + static simgrid::ModuleGroup models("disk model"); + return models; +} + +#define SIMGRID_REGISTER_HOST_MODEL(id, desc, init) \ + static void XBT_ATTRIB_CONSTRUCTOR(800) _XBT_CONCAT3(simgrid_, id, _host_model_register)() \ + { \ + simgrid_host_models().add(_XBT_STRINGIFY(id), (desc), (init)); \ + } +/** @brief The list of all available host models (pick one with --cfg=host/model) */ +inline auto& simgrid_host_models() // Function to avoid static initialization order fiasco +{ + static simgrid::ModuleGroup models("host model"); + return models; +} + +XBT_PUBLIC void simgrid_vm_model_init_HL13(); + +#endif