#ifndef __STG_SGCONF_UTILS_H__ #define __STG_SGCONF_UTILS_H__ #include "stg/common.h" #include "stg/resetable.h" #include <string> #include <map> namespace SGCONF { template <typename T> inline void MaybeSet(const std::map<std::string, std::string> & options, const std::string & name, RESETABLE<T> & res) { std::map<std::string, std::string>::const_iterator it(options.find(name)); if (it == options.end()) return; T value; if (str2x(it->second, value) < 0) return; res = value; } template <typename T, typename F> inline void MaybeSet(const std::map<std::string, std::string> & options, const std::string & name, T & res, F conv) { std::map<std::string, std::string>::const_iterator it(options.find(name)); if (it == options.end()) return; conv(it->second, res); } template <> inline void MaybeSet<std::string>(const std::map<std::string, std::string> & options, const std::string & name, RESETABLE<std::string> & res) { std::map<std::string, std::string>::const_iterator it(options.find(name)); if (it == options.end()) return; res = it->second; } } // namespace SGCONF #endif