1 #include "settings.hpp"
10 std::map
<std::string
, setting
*>* settings
;
13 setting::setting(const std::string
& name
) throw(std::bad_alloc
)
16 settings
= new std::map
<std::string
, setting
*>();
17 (*settings
)[settingname
= name
] = this;
20 setting::~setting() throw()
24 settings
->erase(settingname
);
27 void setting_set(const std::string
& _setting
, const std::string
& value
) throw(std::bad_alloc
, std::runtime_error
)
29 if(!settings
|| !settings
->count(_setting
))
30 throw std::runtime_error("No such setting '" + _setting
+ "'");
32 (*settings
)[_setting
]->set(value
);
33 } catch(std::bad_alloc
& e
) {
35 } catch(std::exception
& e
) {
36 throw std::runtime_error("Can't set setting '" + _setting
+ "': " + e
.what());
40 void setting_blank(const std::string
& _setting
) throw(std::bad_alloc
, std::runtime_error
)
42 if(!settings
|| !settings
->count(_setting
))
43 throw std::runtime_error("No such setting '" + _setting
+ "'");
45 (*settings
)[_setting
]->blank();
46 } catch(std::bad_alloc
& e
) {
48 } catch(std::exception
& e
) {
49 throw std::runtime_error("Can't blank setting '" + _setting
+ "': " + e
.what());
53 std::string
setting_get(const std::string
& _setting
) throw(std::bad_alloc
, std::runtime_error
)
55 if(!settings
|| !settings
->count(_setting
))
56 throw std::runtime_error("No such setting '" + _setting
+ "'");
57 return (*settings
)[_setting
]->get();
60 bool setting_isblank(const std::string
& _setting
) throw(std::bad_alloc
, std::runtime_error
)
62 if(!settings
|| !settings
->count(_setting
))
63 throw std::runtime_error("No such setting '" + _setting
+ "'");
64 return !((*settings
)[_setting
]->is_set());
67 void setting_print_all(window
* win
) throw(std::bad_alloc
)
71 for(auto i
= settings
->begin(); i
!= settings
->end(); i
++) {
72 if(!i
->second
->is_set())
73 out(win
) << i
->first
<< ": (unset)" << std::endl
;
75 out(win
) << i
->first
<< ": " << i
->second
->get() << std::endl
;
79 numeric_setting::numeric_setting(const std::string
& sname
, int32_t minv
, int32_t maxv
, int32_t dflt
)
88 void numeric_setting::blank() throw(std::bad_alloc
, std::runtime_error
)
90 throw std::runtime_error("This setting can't be blanked");
93 bool numeric_setting::is_set() throw()
98 void numeric_setting::set(const std::string
& _value
) throw(std::bad_alloc
, std::runtime_error
)
100 int32_t v
= parse_value
<int32_t>(_value
);
101 if(v
< minimum
|| v
> maximum
) {
102 std::ostringstream x
;
103 x
<< "Value out of range (" << minimum
<< " - " << maximum
<< ")";
104 throw std::runtime_error(x
.str());
109 std::string
numeric_setting::get() throw(std::bad_alloc
)
111 std::ostringstream x
;
116 numeric_setting::operator int32_t() throw()