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)),
42 mTransaction(mStorePtr->getTransaction())
46 ToKVStoreVisitor& operator=(const ToKVStoreVisitor&) = delete;
49 void visit(const std::string& name, const T& value)
51 setInternal(key(mKeyPrefix, name), value);
55 std::shared_ptr<KVStore> mStorePtr;
56 std::string mKeyPrefix;
57 KVStore::Transaction mTransaction;
59 ToKVStoreVisitor(const ToKVStoreVisitor& visitor, const std::string& prefix)
60 : mStorePtr(visitor.mStorePtr),
62 mTransaction(visitor.mTransaction)
66 template<typename T, typename std::enable_if<!isVisitable<T>::value, int>::type = 0>
67 void setInternal(const std::string& name, const T& value)
69 mStorePtr->set(name, value);
72 template<typename T, typename std::enable_if<isVisitable<T>::value, int>::type = 0>
73 void setInternal(const std::string& name, const T& value)
75 ToKVStoreVisitor visitor(*this, name);
76 value.accept(visitor);
79 template<typename T, typename std::enable_if<isVisitable<T>::value, int>::type = 0>
80 void setInternal(const std::string& name, const std::vector<T>& values)
82 mStorePtr->remove(name);
83 mStorePtr->set(name, values.size());
84 for (size_t i = 0; i < values.size(); ++i) {
85 setInternal(key(name, std::to_string(i)), values[i]);
92 #endif // CONFIG_TO_KVSTORE_VISITOR_HPP