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 saving to KVStore
25 #ifndef CONFIG_TO_KVSTORE_VISITOR_HPP
26 #define CONFIG_TO_KVSTORE_VISITOR_HPP
28 #include "config/is-visitable.hpp"
29 #include "config/kvstore.hpp"
36 class ToKVStoreVisitor {
39 ToKVStoreVisitor(const std::string& filePath, const std::string& prefix)
40 : mStorePtr(new KVStore(filePath)),
45 ToKVStoreVisitor(const ToKVStoreVisitor& visitor, const std::string& prefix)
46 : mStorePtr(visitor.mStorePtr),
55 ToKVStoreVisitor& operator=(const ToKVStoreVisitor&) = delete;
58 void visit(const std::string& name, const T& value)
60 setInternal(key(mKeyPrefix, name), value);
64 std::shared_ptr<KVStore> mStorePtr;
65 std::string mKeyPrefix;
68 template<class T, class std::enable_if<!isVisitable<T>::value, int>::type = 0>
69 void setInternal(const std::string& name, const T& value)
71 mStorePtr->set(name, value);
74 template<class T, class std::enable_if<isVisitable<T>::value, int>::type = 0>
75 void setInternal(const std::string& name, const T& value)
77 ToKVStoreVisitor visitor(*this, name);
78 value.accept(visitor);
84 #endif // CONFIG_TO_KVSTORE_VISITOR_HPP