X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f23b0fb864cb60978c1fcfd48d50f62dd054fe31..22d4f5ed48929be96cbecf38da71762936dd7011:/include/xbt/config.hpp diff --git a/include/xbt/config.hpp b/include/xbt/config.hpp index c8888e639a..2e13f118bc 100644 --- a/include/xbt/config.hpp +++ b/include/xbt/config.hpp @@ -69,12 +69,12 @@ XBT_PUBLIC void set_parse(std::string options); // Get config -template XBT_PUBLIC T const& get_value(const char* name); +template XBT_PUBLIC T const& get_value(std::string name); -extern template XBT_PUBLIC int const& get_value(const char* name); -extern template XBT_PUBLIC double const& get_value(const char* name); -extern template XBT_PUBLIC bool const& get_value(const char* name); -extern template XBT_PUBLIC std::string const& get_value(const char* name); +extern template XBT_PUBLIC int const& get_value(std::string name); +extern template XBT_PUBLIC double const& get_value(std::string name); +extern template XBT_PUBLIC bool const& get_value(std::string name); +extern template XBT_PUBLIC std::string const& get_value(std::string name); // Register: @@ -86,16 +86,16 @@ extern template XBT_PUBLIC std::string const& get_value(const char* * @param callback called with the option value */ template -XBT_PUBLIC void declare_flag(const char* name, const char* description, T value, +XBT_PUBLIC void declare_flag(std::string name, std::string description, T value, std::function callback = std::function()); -extern template XBT_PUBLIC void declare_flag(const char* name, const char* description, int value, +extern template XBT_PUBLIC void declare_flag(std::string name, std::string description, int value, std::function callback); -extern template XBT_PUBLIC void declare_flag(const char* name, const char* description, double value, +extern template XBT_PUBLIC void declare_flag(std::string name, std::string description, double value, std::function callback); -extern template XBT_PUBLIC void declare_flag(const char* name, const char* description, bool value, +extern template XBT_PUBLIC void declare_flag(std::string name, std::string description, bool value, std::function callback); -extern template XBT_PUBLIC void declare_flag(const char* name, const char* description, std::string value, +extern template XBT_PUBLIC void declare_flag(std::string name, std::string description, std::string value, std::function callback); // ***** alias ***** @@ -175,6 +175,15 @@ bind_flag(T& value, const char* name, const char* description, std::map +typename std::enable_if()(std::declval()))>::value, void>::type +bind_flag(T& value, const char* name, std::initializer_list aliases, const char* description, + std::map valid_values, F callback) +{ + bind_flag(value, name, description, std::move(valid_values), std::move(callback)); + alias(name, std::move(aliases)); +} + /** Bind a variable to configuration flag * *

@@ -249,6 +258,15 @@ public:
     simgrid::config::bind_flag(value_, name, desc, std::move(valid_values), std::move(callback));
   }
 
+  /* A constructor with everything */
+  template 
+  Flag(const char* name, std::initializer_list aliases, const char* desc, T value,
+       std::map valid_values, F callback)
+      : value_(value)
+  {
+    simgrid::config::bind_flag(value_, name, std::move(aliases), desc, std::move(valid_values), std::move(callback));
+  }
+
   // No copy:
   Flag(Flag const&) = delete;
   Flag& operator=(Flag const&) = delete;