-/* Copyright (c) 2004-2014,2016. The SimGrid Team. All rights reserved. */
+/* Copyright (c) 2004-2017. 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. */
-#include <stdio.h>
+#include <cstdio>
+#include <algorithm>
#include <cerrno>
#include <cstring>
#include <climits>
#include <string>
#include <typeinfo>
#include <type_traits>
+#include <vector>
#include <xbt/ex.hpp>
#include <xbt/config.h>
namespace simgrid {
namespace config {
-missing_key_error::~missing_key_error() {}
+missing_key_error::~missing_key_error() = default;
class Config;
ConfigurationElement(const char* key, const char* desc, xbt_cfg_cb_t cb)
: key(key ? key : ""), desc(desc ? desc : ""), old_callback(cb) {}
- virtual ~ConfigurationElement();
+ virtual ~ConfigurationElement()=default;
virtual std::string getStringValue() = 0;
virtual void setStringValue(const char* value) = 0;
std::string const& getDescription() const { return desc; }
};
-ConfigurationElement::~ConfigurationElement() {}
-
// **** TypedConfigurationElement<T> ****
// TODO, could we use boost::any with some Type* reference?
: ConfigurationElement(key, desc), content(std::move(value)),
callback(std::move(callback))
{}
- ~TypedConfigurationElement() override;
+ ~TypedConfigurationElement()=default;
std::string getStringValue() override;
const char* getTypeName() override;
return ConfigType<T>::type_name;
}
-template<class T>
-TypedConfigurationElement<T>::~TypedConfigurationElement()
-{}
-
} // end of anonymous namespace
// **** Config ****
void Config::showAliases()
{
xbt_dict_cursor_t dict_cursor;
- unsigned int dynar_cursor;
xbt_dictelm_t dictel;
char *name;
- xbt_dynar_t names = xbt_dynar_new(sizeof(char *), nullptr);
+ std::vector<char*> names;
xbt_dict_foreach(this->aliases, dict_cursor, name, dictel)
- xbt_dynar_push(names, &name);
- xbt_dynar_sort_strings(names);
+ names.push_back(name);
+ std::sort(begin(names), end(names), [](char* a, char* b) { return strcmp(a, b) < 0; });
- xbt_dynar_foreach(names, dynar_cursor, name)
+ for (auto name : names)
printf(" %s: %s\n", name, (*this)[name].getDescription().c_str());
}
void Config::help()
{
xbt_dict_cursor_t dict_cursor;
- unsigned int dynar_cursor;
simgrid::config::ConfigurationElement* variable;
char *name;
- xbt_dynar_t names = xbt_dynar_new(sizeof(char *), nullptr);
+ std::vector<char*> names;
xbt_dict_foreach(this->options, dict_cursor, name, variable)
- xbt_dynar_push(names, &name);
- xbt_dynar_sort_strings(names);
+ names.push_back(name);
+ std::sort(begin(names), end(names), [](char* a, char* b) { return strcmp(a, b) < 0; });
- xbt_dynar_foreach(names, dynar_cursor, name) {
+ for (auto name : names) {
variable = (simgrid::config::ConfigurationElement*) xbt_dict_get(this->options, name);
printf(" %s: %s\n", name, variable->getDescription().c_str());
printf(" Type: %s; ", variable->getTypeName());
printf("Current value: %s\n", variable->getStringValue().c_str());
}
- xbt_dynar_free(&names);
}
// ***** getConfig *****
*/
void xbt_cfg_set_parse(const char *options)
{
- if (!options || !strlen(options)) { /* nothing to do */
+ if (not options || not strlen(options)) { /* nothing to do */
return;
}
char *optionlist_cpy = xbt_strdup(options);
XBT_DEBUG("List to parse and set:'%s'", options);
char *option = optionlist_cpy;
while (1) { /* breaks in the code */
- if (!option)
+ if (not option)
break;
char *name = option;
int len = strlen(name);
if (name[0] == ' ' || name[0] == '\n' || name[0] == '\t')
continue;
- if (!strlen(name))
+ if (not strlen(name))
break;
char *val = strchr(name, ':');
xbt_test_assert(string_flag == "bar", "Check string flag");
xbt_test_assert(double_flag == 8.0, "Check double flag");
xbt_test_assert(bool_flag1, "Check bool1 flag");
- xbt_test_assert(!bool_flag2, "Check bool2 flag");
+ xbt_test_assert(not bool_flag2, "Check bool2 flag");
xbt_cfg_free(&simgrid_config);
simgrid_config = temp;