* so earlier clients are sent a CephChoices argdesc instead, and will
* send us a "--foo-bar" value string for boolean arguments.
*/
- if (cmdmap.count(k)) {
+ auto found = cmdmap.find(k);
+ if (found == cmdmap.end()) {
+ return false;
+ }
+ try {
+ val = boost::get<bool>(found->second);
+ return true;
+ } catch (boost::bad_get&) {
try {
- val = boost::get<bool>(cmdmap.find(k)->second);
- return true;
- } catch (boost::bad_get&) {
- try {
- std::string expected{"--"};
- expected += k;
- std::replace(expected.begin(), expected.end(), '_', '-');
-
- std::string v_str = boost::get<std::string>(cmdmap.find(k)->second);
- if (v_str == expected) {
- val = true;
- return true;
- } else {
- throw bad_cmd_get(k, cmdmap);
- }
- } catch (boost::bad_get&) {
- throw bad_cmd_get(k, cmdmap);
+ std::string expected{"--"};
+ expected += k;
+ std::replace(expected.begin(), expected.end(), '_', '-');
+
+ std::string v_str = boost::get<std::string>(found->second);
+ if (v_str == expected) {
+ val = true;
+ return true;
+ } else {
+ throw bad_cmd_get(k, cmdmap);
}
+ } catch (boost::bad_get&) {
+ throw bad_cmd_get(k, cmdmap);
}
}
- return false;
}
}
bool cmd_getval(const cmdmap_t& cmdmap,
std::string_view 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);
- }
+ auto found = cmdmap.find(k);
+ if (found == cmdmap.end()) {
+ return false;
+ }
+ try {
+ val = boost::get<T>(found->second);
+ return true;
+ } catch (boost::bad_get&) {
+ throw bad_cmd_get(k, cmdmap);
}
- return false;
}
// with default
const cmdmap_t& cmdmap, std::string_view 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 {
+ auto found = cmdmap.find(k);
+ if (found == cmdmap.end()) {
val = defval;
return true;
}
+ try {
+ val = boost::get<T>(cmdmap.find(k)->second);
+ return true;
+ } catch (boost::bad_get&) {
+ throw bad_cmd_get(k, cmdmap);
+ }
}
template <typename T>