1 #include "settingvar.hpp"
2 #include "register-queue.hpp"
6 typedef register_queue
<setting_var_group
, setting_var_base
> regqueue_t
;
9 setting_var_listener::~setting_var_listener() throw()
13 setting_var_group::setting_var_group() throw(std::bad_alloc
)
15 regqueue_t::do_ready(*this, true);
18 setting_var_group::~setting_var_group() throw()
20 regqueue_t::do_ready(*this, false);
23 std::set
<std::string
> setting_var_group::get_settings_set() throw(std::bad_alloc
)
26 std::set
<std::string
> x
;
27 for(auto i
: settings
)
32 setting_var_base
& setting_var_group::operator[](const std::string
& name
)
35 if(!settings
.count(name
))
36 throw std::runtime_error("No such setting");
37 return *settings
[name
];
40 void setting_var_group::fire_listener(setting_var_base
& var
) throw()
42 std::set
<setting_var_listener
*> l
;
45 for(auto i
: listeners
)
50 i
->on_setting_change(*this, var
);
55 void setting_var_group::add_listener(struct setting_var_listener
& listener
) throw(std::bad_alloc
)
58 listeners
.insert(&listener
);
61 void setting_var_group::remove_listener(struct setting_var_listener
& listener
) throw(std::bad_alloc
)
64 listeners
.erase(&listener
);
67 void setting_var_group::do_register(const std::string
& name
, setting_var_base
& _setting
) throw(std::bad_alloc
)
70 settings
[name
] = &_setting
;
73 void setting_var_group::do_unregister(const std::string
& name
) throw(std::bad_alloc
)
79 setting_var_base::setting_var_base(setting_var_group
& _group
, const std::string
& _iname
, const std::string
& _hname
)
81 : group(_group
), iname(_iname
), hname(_hname
)
83 regqueue_t::do_register(group
, iname
, *this);
86 setting_var_base::~setting_var_base() throw()
88 regqueue_t::do_unregister(group
, iname
);
91 setting_var_cache::setting_var_cache(setting_var_group
& _grp
)
96 std::map
<std::string
, std::string
> setting_var_cache::get_all()
98 std::map
<std::string
, std::string
> x
;
99 auto s
= grp
.get_settings_set();
102 for(auto i
: badcache
)
103 x
[i
.first
] = i
.second
;
107 std::set
<std::string
> setting_var_cache::get_keys()
109 return grp
.get_settings_set();
112 void setting_var_cache::set(const std::string
& name
, const std::string
& value
, bool allow_invalid
)
113 throw(std::bad_alloc
, std::runtime_error
)
116 grp
[name
].str(value
);
117 umutex_class
h(lock
);
118 badcache
.erase(name
);
119 } catch(std::bad_alloc
& e
) {
121 } catch(std::exception
& e
) {
123 umutex_class
h(lock
);
124 badcache
[name
] = value
;
130 std::string
setting_var_cache::get(const std::string
& name
) throw(std::bad_alloc
, std::runtime_error
)
132 return grp
[name
].str();
135 const setting_var_description
& setting_var_cache::get_description(const std::string
& name
) throw(std::bad_alloc
,
138 return grp
[name
].get_description();
142 const char* setting_yes_no::enable
= "yes";
143 const char* setting_yes_no::disable
= "no";