Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Useless cast to int.
[simgrid.git] / src / xbt / config.cpp
index 758650c2d3996a88bbe66e7bba9f4f3941c28794..ef9fcf678abb3b004af6ccd5b3b27001733319b0 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (c) 2004-2019. The SimGrid Team. All rights reserved.     */
+/* Copyright (c) 2004-2020. 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. */
@@ -97,9 +97,14 @@ template <class T> class ConfigType;
 template <> class ConfigType<int> {
 public:
   static constexpr const char* type_name = "int";
-  static inline double parse(const char* value)
+  static inline int parse(const char* value)
   {
-    return parse_long(value);
+    long val = parse_long(value);
+    if (val < INT_MIN)
+      throw std::range_error("underflow");
+    if (val > INT_MAX)
+      throw std::range_error("overflow");
+    return static_cast<int>(val);
   }
 };
 template <> class ConfigType<double> {
@@ -260,7 +265,7 @@ public:
   {
     xbt_assert(options.find(name) == options.end(), "Refusing to register the config element '%s' twice.",
                name.c_str());
-    TypedConfigurationElement<T>* variable = new TypedConfigurationElement<T>(name, std::forward<A>(a)...);
+    auto* variable = new TypedConfigurationElement<T>(name, std::forward<A>(a)...);
     XBT_DEBUG("Register cfg elm %s (%s) of type %s @%p in set %p)", name.c_str(), variable->get_description().c_str(),
               variable->get_type_name(), variable, this);
     options[name].reset(variable);
@@ -269,9 +274,9 @@ public:
   }
 
   // Debug:
-  void dump(const char *name, const char *indent);
-  void show_aliases();
-  void help();
+  void dump(const char* name, const char* indent) const;
+  void show_aliases() const;
+  void help() const;
 
 protected:
   ConfigurationElement* get_dict_element(const std::string& name);
@@ -321,29 +326,28 @@ void Config::alias(const std::string& realname, const std::string& aliasname)
  * @param name The name to give to this config set
  * @param indent what to write at the beginning of each line (right number of spaces)
  */
-void Config::dump(const char *name, const char *indent)
+void Config::dump(const char* name, const char* indent) const
 {
-  XBT_LOG_DEFAULT_CATEGORY(xbt_help);
   if (name)
-    XBT_VERB("%s>> Dumping of the config set '%s':", indent, name);
+    XBT_CVERB(xbt_help, "%s>> Dumping of the config set '%s':", indent, name);
 
   for (auto const& elm : options)
-    XBT_VERB("%s  %s: ()%s) %s", indent, elm.first.c_str(), elm.second->get_type_name(),
-             elm.second->get_string_value().c_str());
+    XBT_CVERB(xbt_help, "%s  %s: ()%s) %s", indent, elm.first.c_str(), elm.second->get_type_name(),
+              elm.second->get_string_value().c_str());
 
   if (name)
-    XBT_VERB("%s<< End of the config set '%s'", indent, name);
+    XBT_CVERB(xbt_help, "%s<< End of the config set '%s'", indent, name);
 }
 
 /** @brief Displays the declared aliases and their replacement */
-void Config::show_aliases()
+void Config::show_aliases() const
 {
   for (auto const& elm : aliases)
     XBT_HELP("   %-40s %s", elm.first.c_str(), elm.second->get_key().c_str());
 }
 
 /** @brief Displays the declared options and their description */
-void Config::help()
+void Config::help() const
 {
   for (auto const& elm : options) {
     simgrid::config::ConfigurationElement* variable = elm.second.get();