};
+namespace {
template<typename T>
-void KVStore::setInternal(const std::string& key, const T& value)
+std::string toString(const T& value)
{
std::ostringstream oss;
oss << value;
- setInternal(key, oss.str());
+ return oss.str();
+}
+
+template<typename T>
+T fromString(const std::string& strValue)
+{
+ std::istringstream iss(strValue);
+ T value;
+ iss >> value;
+ return value;
+}
+
+} // namespace
+
+template<typename T>
+void KVStore::setInternal(const std::string& key, const T& value)
+{
+ setInternal(key, toString(value));
}
template<typename T>
{
std::vector<std::string> strValues(values.size());
- auto toString = [](const T & value) -> std::string {
- std::ostringstream oss;
- oss << value;
- return oss.str();
- };
std::transform(values.begin(),
values.end(),
strValues.begin(),
- toString);
+ toString<T>);
setInternal(key, strValues);
}
template<typename T>
T KVStore::getInternal(const std::string& key, T*)
{
- std::istringstream ss(getInternal(key, static_cast<std::string*>(nullptr)));
- T ret;
- ss >> ret;
- return ret;
+ return fromString<T>(getInternal(key, static_cast<std::string*>(nullptr)));
}
template<typename T>
std::vector<std::string> strValues = getInternal(key, static_cast<std::vector<std::string>*>(nullptr));
std::vector<T> values(strValues.size());
- auto parse = [](const std::string & strValue) -> T {
- std::istringstream iss(strValue);
- T value;
- iss >> value;
- return value;
- };
std::transform(strValues.begin(),
strValues.end(),
values.begin(),
- parse);
+ fromString<T>);
return values;
}
+
+/**
+ * Concatenates all parameters into one std::string.
+ * Uses '.' to connect the terms.
+ * @param args components of the string
+ * @tparam delim optional delimiter
+ * @tparam typename ... Args any type implementing str
+ * @return string created from he args
+ */
+template<char delim = '.', typename Arg1, typename ... Args>
+std::string key(const Arg1& a1, const Args& ... args)
+{
+ std::string ret = toString(a1);
+ std::initializer_list<std::string> strings {toString(args)...};
+ for (const std::string& s : strings) {
+ ret += delim + s;
+ }
+
+ return ret;
+}
+
+/**
+ * Function added for key function completeness.
+ *
+ * @tparam delim = '.' parameter not used, added for consistency
+ * @return empty string
+ */
+template<char delim = '.'>
+std::string key()
+{
+ return std::string();
+}
+
} // namespace config
#endif // COMMON_CONFIG_KVSTORE_HPP