From 2505490e79399dc556b2244e05be9093908ee98d Mon Sep 17 00:00:00 2001 From: Kefu Chai Date: Thu, 20 May 2021 10:27:37 +0800 Subject: [PATCH] common/cmdparse: use map::find() only a single time instead of using the combo of if (map.count(key)) { return map.find(key)->second; } just use found = map.find(key); if (found != map.end()) { return found->second; } to avoid repeating the lookup in the map with the same key. Signed-off-by: Kefu Chai --- src/common/cmdparse.cc | 39 ++++++++++++++++++++------------------- src/common/cmdparse.h | 33 +++++++++++++++++---------------- 2 files changed, 37 insertions(+), 35 deletions(-) diff --git a/src/common/cmdparse.cc b/src/common/cmdparse.cc index 1754869eaa71..6817f6454115 100644 --- a/src/common/cmdparse.cc +++ b/src/common/cmdparse.cc @@ -645,29 +645,30 @@ bool cmd_getval(const cmdmap_t& cmdmap, * 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(found->second); + return true; + } catch (boost::bad_get&) { try { - val = boost::get(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(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(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; } } diff --git a/src/common/cmdparse.h b/src/common/cmdparse.h index 78b6eb623bee..25d72e87920d 100644 --- a/src/common/cmdparse.h +++ b/src/common/cmdparse.h @@ -65,15 +65,16 @@ template bool cmd_getval(const cmdmap_t& cmdmap, std::string_view k, T& val) { - if (cmdmap.count(k)) { - try { - val = boost::get(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(found->second); + return true; + } catch (boost::bad_get&) { + throw bad_cmd_get(k, cmdmap); } - return false; } // with default @@ -83,17 +84,17 @@ bool cmd_getval( const cmdmap_t& cmdmap, std::string_view k, T& val, const T& defval) { - if (cmdmap.count(k)) { - try { - val = boost::get(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(cmdmap.find(k)->second); + return true; + } catch (boost::bad_get&) { + throw bad_cmd_get(k, cmdmap); + } } template -- 2.47.3