};
template <typename T>
-bool
-cmd_getval(CephContext *cct, const cmdmap_t& cmdmap, const std::string& k, T& val)
+bool cmd_getval(CephContext *cct, const cmdmap_t& cmdmap, const std::string& k,
+ T& val)
{
if (cmdmap.count(k)) {
try {
return false;
}
+template <typename T>
+bool cmd_getval_throws(CephContext *cct, const cmdmap_t& cmdmap,
+ const std::string& k, T& val)
+{
+ if (cmdmap.count(k)) {
+ try {
+ val = boost::get<T>(cmdmap.find(k)->second);
+ return true;
+ } catch (boost::bad_get&) {
+ throw bad_cmd_get(k, cmdmap);
+ }
+ }
+ return false;
+}
+
// with default
template <typename T>
-void
-cmd_getval(CephContext *cct, const cmdmap_t& cmdmap, const std::string& k, T& val, const T& defval)
+void cmd_getval(CephContext *cct, const cmdmap_t& cmdmap, const std::string& k,
+ T& val, const T& defval)
{
if (!cmd_getval(cct, cmdmap, k, val))
val = defval;
}
+template <typename T>
+bool cmd_getval_throws(
+ CephContext *cct, const cmdmap_t& cmdmap, const std::string& k,
+ T& val, const T& defval)
+{
+ if (cmdmap.count(k)) {
+ try {
+ val = boost::get<T>(cmdmap.find(k)->second);
+ return true;
+ } catch (boost::bad_get&) {
+ throw bad_cmd_get(k, cmdmap);
+ }
+ } else {
+ val = defval;
+ return true;
+ }
+}
+
template <typename T>
void
cmd_putval(CephContext *cct, cmdmap_t& cmdmap, const std::string& k, const T& val)