X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/d1a82dae27086cc6f9ea4e0163d2941c74135c94..3a2451e6d3940d00410f537a275f3e3a8db134d7:/src/surf/PropertyHolder.cpp diff --git a/src/surf/PropertyHolder.cpp b/src/surf/PropertyHolder.cpp index 03210a7ce2..bf262b9e1e 100644 --- a/src/surf/PropertyHolder.cpp +++ b/src/surf/PropertyHolder.cpp @@ -1,44 +1,56 @@ -/* Copyright (c) 2015. The SimGrid Team. All rights reserved. */ +/* Copyright (c) 2015-2019. 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 "PropertyHolder.hpp" +#include + namespace simgrid { namespace surf { -PropertyHolder::PropertyHolder() = default; - -PropertyHolder::~PropertyHolder() { - delete properties_; -} - /** @brief Return the property associated to the provided key (or nullptr if not existing) */ -const char *PropertyHolder::getProperty(const char*key) { - if (properties_ == nullptr) - return nullptr; - try { - return properties_->at(key).c_str(); - } catch (std::out_of_range& unfound) { +const char* PropertyHolder::get_property(const std::string& key) const +{ + if (not properties_) return nullptr; - } + auto prop = properties_->find(key); + return prop == properties_->end() ? nullptr : prop->second.c_str(); } /** @brief Change the value of a given key in the property set */ -void PropertyHolder::setProperty(const char*key, const char*value) { +void PropertyHolder::set_property(const std::string& key, const std::string& value) +{ if (not properties_) - properties_ = new std::unordered_map; + properties_.reset(new std::unordered_map); (*properties_)[key] = value; } /** @brief Return the whole set of properties. Don't mess with it, dude! */ -std::unordered_map* PropertyHolder::getProperties() +const std::unordered_map* PropertyHolder::get_properties() +{ + if (not properties_) + properties_.reset(new std::unordered_map); + return properties_.get(); +} + +/** @brief Change the value of the given keys in the property set */ +template void PropertyHolder::set_properties(const Assoc& properties) { if (not properties_) - properties_ = new std::unordered_map; - return properties_; + properties_.reset(new std::unordered_map); + std::unordered_map props(properties.cbegin(), properties.cend()); +#if __cplusplus >= 201703L + props.merge(properties_); +#else + props.insert(properties_->cbegin(), properties_->cend()); +#endif + properties_->swap(props); } +template void PropertyHolder::set_properties(const std::map& properties); +template void PropertyHolder::set_properties(const std::unordered_map& properties); + } /* namespace surf */ } /* namespace simgrid */