diff options
author | Lutz Bichler <Lutz.Bichler@bmw.de> | 2020-02-12 13:04:15 +0100 |
---|---|---|
committer | Lutz Bichler <Lutz.Bichler@bmw.de> | 2020-02-12 13:04:15 +0100 |
commit | 8371cdca9463a75220c4de92b47c8df9d3bbe346 (patch) | |
tree | 16b4bf73c284b026b0ac032171110dafd1752196 /implementation/configuration/src/configuration_plugin_impl.cpp | |
parent | ee44d19e0a3773adcda3bace073c66e334a3e6a7 (diff) | |
download | vSomeIP-3.1.7.1.tar.gz |
vsomeip 3.1.7.13.1.7.1
Diffstat (limited to 'implementation/configuration/src/configuration_plugin_impl.cpp')
-rw-r--r-- | implementation/configuration/src/configuration_plugin_impl.cpp | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/implementation/configuration/src/configuration_plugin_impl.cpp b/implementation/configuration/src/configuration_plugin_impl.cpp new file mode 100644 index 0000000..df175f3 --- /dev/null +++ b/implementation/configuration/src/configuration_plugin_impl.cpp @@ -0,0 +1,52 @@ +// Copyright (C) 2019 Bayerische Motoren Werke Aktiengesellschaft (BMW AG) +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#include <vsomeip/internal/logger.hpp> + +#include "../include/configuration_plugin_impl.hpp" +#include "../include/configuration_impl.hpp" + +VSOMEIP_PLUGIN(vsomeip_v3::configuration_plugin_impl) + +namespace vsomeip_v3 { + +configuration_plugin_impl::configuration_plugin_impl() + : plugin_impl("vsomeip-configuration-plugin", + VSOMEIP_CONFIG_PLUGIN_VERSION, + plugin_type_e::CONFIGURATION_PLUGIN) { +} + +configuration_plugin_impl::~configuration_plugin_impl() { +} + +std::shared_ptr<configuration> +configuration_plugin_impl::get_configuration(const std::string &_name) { + std::lock_guard<std::mutex> its_lock(mutex_); + if (!default_) { + default_ = std::make_shared<cfg::configuration_impl>(); + default_->load(_name); + } + +#ifdef VSOMEIP_ENABLE_CONFIGURATION_OVERLAYS + auto its_configuration(default_); + if (its_configuration->has_overlay(_name)) { + VSOMEIP_INFO << "Loading configuration overlay for \"" << _name << "\""; + auto its_iterator = configurations_.find(_name); + if (its_iterator != configurations_.end()) { + its_configuration = its_iterator->second; + } else { + its_configuration = std::make_shared<cfg::configuration_impl>( + *(its_configuration.get())); + its_configuration->load_overlay(_name); + configurations_[_name] = its_configuration; + } + } + return its_configuration; +#else + return default_; +#endif // VSOMEIP_ENABLE_CONFIGURATION_OVERLAYS +} + +} // namespace vsomeip_v3 |