summaryrefslogtreecommitdiff
path: root/implementation/configuration/src/configuration_plugin_impl.cpp
diff options
context:
space:
mode:
authorLutz Bichler <Lutz.Bichler@bmw.de>2020-02-12 13:04:15 +0100
committerLutz Bichler <Lutz.Bichler@bmw.de>2020-02-12 13:04:15 +0100
commit8371cdca9463a75220c4de92b47c8df9d3bbe346 (patch)
tree16b4bf73c284b026b0ac032171110dafd1752196 /implementation/configuration/src/configuration_plugin_impl.cpp
parentee44d19e0a3773adcda3bace073c66e334a3e6a7 (diff)
downloadvSomeIP-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.cpp52
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