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/exception.hpp"
30 #include "config/kvstore.hpp"
37 class FromKVStoreVisitor {
39 explicit FromKVStoreVisitor(const std::string& filePath, const std::string& prefix)
40 : mStorePtr(new KVStore(filePath)),
45 FromKVStoreVisitor(const FromKVStoreVisitor& visitor, const std::string& prefix)
46 : mStorePtr(visitor.mStorePtr),
55 FromKVStoreVisitor& operator=(const FromKVStoreVisitor&) = delete;
58 void visit(const std::string& name, T& value)
60 getInternal(key(mKeyPrefix, name), value);
64 std::shared_ptr<KVStore> mStorePtr;
65 std::string mKeyPrefix;
67 template<class T, class std::enable_if<!isVisitable<T>::value, int>::type = 0>
68 void getInternal(const std::string& name, T& value)
70 value = mStorePtr->get<T>(name);
73 template<class T, class std::enable_if<isVisitable<T>::value, int>::type = 0>
74 void getInternal(const std::string& name, T& value)
76 FromKVStoreVisitor visitor(*this, name);
77 value.accept(visitor);
83 #endif // CONFIG_FROM_KVSTORE_VISITOR_HPP