From c6251977c7530cd73bc7a90175a36ea7e5c95e4d Mon Sep 17 00:00:00 2001 From: Gabriel Corona Date: Mon, 2 May 2016 16:27:43 +0200 Subject: [PATCH] [config] Some alias support in the C++ API --- include/xbt/config.hpp | 32 ++++++++++++++++++++++++++++++++ src/xbt/config.cpp | 8 +++++++- 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/include/xbt/config.hpp b/include/xbt/config.hpp index 65279e8a08..5187bcd4d8 100644 --- a/include/xbt/config.hpp +++ b/include/xbt/config.hpp @@ -10,6 +10,7 @@ #include #include +#include #include #include #include @@ -71,6 +72,18 @@ extern template XBT_PUBLIC(void) declareFlag(const char* name, extern template XBT_PUBLIC(void) declareFlag(const char* name, const char* description, std::string value, std::function callback); +// ***** alias ***** + +XBT_PUBLIC(void) alias(const char* realname, const char* aliasname); + +inline +void alias(std::initializer_list names) +{ + auto i = names.begin(); + for (++i; i != names.end(); ++i) + alias(*names.begin(), *i); +} + /** Bind a variable to configuration flag * * @param value Bound variable @@ -86,6 +99,13 @@ void bindFlag(T& value, const char* name, const char* description) }); } +template +void bindFlag(T& value, std::initializer_list names, const char* description) +{ + bindFlag(value, *names.begin(), description); + alias(names); +} + /** Bind a variable to configuration flag * *

@@ -97,6 +117,18 @@ void bindFlag(T& value, const char* name, const char* description)
  *  
*/ // F is a checker, F : T& -> () +template +typename std::enable_if()(std::declval()) ) +>::value, void>::type +bindFlag(T& value, std::initializer_list names, const char* description, + F callback) +{ + bindFlag(value, *names.begin(), description); + alias(names); +} + template typename std::enable_if(const char* name); template XBT_PUBLIC(bool const&) getConfig(const char* name); template XBT_PUBLIC(std::string const&) getConfig(const char* name); +// ***** alias ***** + +void alias(const char* realname, const char* aliasname) +{ + simgrid_config->alias(realname, aliasname); +} + // ***** declareFlag ***** template @@ -451,7 +458,6 @@ template XBT_PUBLIC(void) declareFlag(const char* name, template XBT_PUBLIC(void) declareFlag(const char* name, const char* description, std::string value, std::function callback); - } } -- 2.20.1