2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Contact: Jan Olszak (j.olszak@samsung.com)
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License
21 * @author Jan Olszak (j.olszak@samsung.com)
22 * @brief Visitor for loading from KVStore
25 #ifndef CONFIG_FROM_KVSTORE_VISITOR_HPP
26 #define CONFIG_FROM_KVSTORE_VISITOR_HPP
28 #include "config/is-visitable.hpp"
29 #include "config/kvstore.hpp"
33 class FromKVStoreVisitor {
35 FromKVStoreVisitor(KVStore& store, const std::string& prefix)
41 FromKVStoreVisitor& operator=(const FromKVStoreVisitor&) = delete;
44 void visit(const std::string& name, T& value)
46 getInternal(key(mKeyPrefix, name), value);
51 std::string mKeyPrefix;
53 FromKVStoreVisitor(const FromKVStoreVisitor& visitor, const std::string& prefix)
54 : mStore(visitor.mStore),
59 template<typename T, typename std::enable_if<!isVisitable<T>::value, int>::type = 0>
60 void getInternal(const std::string& name, T& value)
62 value = mStore.get<T>(name);
65 template<typename T, typename std::enable_if<isVisitable<T>::value, int>::type = 0>
66 void getInternal(const std::string& name, T& value)
68 FromKVStoreVisitor visitor(*this, name);
69 value.accept(visitor);
72 template<typename T, typename std::enable_if<isVisitable<T>::value, int>::type = 0>
73 void getInternal(const std::string& name, std::vector<T>& values)
77 size_t vectorSize = mStore.get<size_t>(name);
78 if (vectorSize == 0) {
82 values.resize(vectorSize);
83 for (size_t i = 0; i < vectorSize; ++i) {
84 const std::string k = key(name, std::to_string(i));
85 getInternal(k, values[i]);
92 #endif // CONFIG_FROM_KVSTORE_VISITOR_HPP