1 #ifndef UTILMM_CONFIG_SET_HH
2 #define UTILMM_CONFIG_SET_HH
6 #include <boost/noncopyable.hpp>
7 #include <boost/lexical_cast.hpp>
8 #include <boost/utility/enable_if.hpp>
18 {
static const bool value =
false; };
19 template<
typename T>
struct is_list< std::list<T> >
20 {
static const bool value =
true; };
25 :
private boost::noncopyable
32 static T convert(std::string
const& value);
36 typedef std::multimap<std::string, std::string>
ValueMap;
38 typedef std::multimap<std::string, const config_set*>
ChildMap;
49 typedef std::list<const config_set*>
subsets;
55 bool exists (
const std::string& attribute)
const;
64 std::list<const config_set*>
children(
const std::string& name)
const;
75 T
get(std::string
const& name, T
const& defval = T(),
76 typename boost::enable_if< details::is_list<T> >::type *enabler = 0)
const;
85 T
get(std::string
const& name, T
const& defval = T(),
86 typename boost::disable_if< details::is_list<T> >::type *enabler = 0)
const;
91 void set(std::string
const& name, std::string
const& value);
96 void set(std::string
const& name, std::list<std::string>
const& value);
98 void insert(std::string
const& name, std::string
const& value);
100 void insert(std::string
const& name, std::list<std::string>
const& value);
104 void erase(std::string
const& name);
111 template<>
bool config_set::convert(std::string
const& value);
113 T config_set::convert(
const std::string& value)
114 {
return boost::lexical_cast<T>(value); }
119 config_set::stringlist
const& defval,
120 boost::enable_if< details::is_list<config_set::stringlist> >::type *enabler)
const;
126 stringlist values = get< stringlist >(name);
131 for (stringlist::const_iterator it = values.begin(); it != values.end(); ++it)
132 result.push_back(convert<typename T::value_type>(*it));
141 std::list<T> deflist;
142 deflist.push_back(defval);
143 return get< std::list<T> >(name, deflist).front();
ChildMap m_children
Definition: configset.hh:39
void insert(std::string const &name, std::string const &value)
T get(std::string const &name, T const &defval=T(), typename boost::enable_if< details::is_list< T > >::type *enabler=0) const
Definition: configset.hh:123
config_set const & child(std::string const &name) const
const config_set * parent() const
bool exists(const std::string &attribute) const
std::multimap< std::string, const config_set * > ChildMap
Definition: configset.hh:38
std::list< std::string > stringlist
Definition: configset.hh:108
Definition: configset.hh:24
config_set(config_set *parent=0)
ValueMap m_values
Definition: configset.hh:37
void erase(std::string const &name)
std::list< const config_set * > subsets
Definition: configset.hh:49
std::list< const config_set * > children(const std::string &name) const
static const bool value
Definition: configset.hh:18
std::multimap< std::string, std::string > ValueMap
Definition: configset.hh:36
void set(std::string const &name, std::string const &value)
config_set * m_parent
Definition: configset.hh:35
friend class ConfigFile
Definition: configset.hh:27
Definition: configset.hh:17