]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
common/cmdparse: add another template cmd_getval_or helper
authorPatrick Donnelly <pdonnell@ibm.com>
Fri, 21 Mar 2025 16:57:25 +0000 (12:57 -0400)
committerPatrick Donnelly <pdonnell@ibm.com>
Mon, 5 Jan 2026 21:23:30 +0000 (16:23 -0500)
To mimic the conventional signature where you pass the lvalue you want to set.

Signed-off-by: Patrick Donnelly <pdonnell@ibm.com>
src/common/cmdparse.h

index 3dd1c82a8955da9d9cd96f414bec0802627c8505..40d1e5af034efa9f01ebc546ef7fe519cc329315 100644 (file)
@@ -136,6 +136,23 @@ T cmd_getval_cast_or(const cmdmap_t& cmdmap, std::string_view k, T defval)
   }
 }
 
+template <typename T, typename V>
+void cmd_getval_or(const cmdmap_t& cmdmap, std::string_view k,
+                   V& val, const V& defval)
+{
+  auto found = cmdmap.find(k);
+  if (found == cmdmap.end()) {
+    val = T(defval);
+  } else {
+    try {
+      val = boost::get<T>(cmdmap.find(k)->second);
+    } catch (boost::bad_get&) {
+      throw bad_cmd_get(k, cmdmap);
+    }
+  }
+}
+
+
 template <typename T>
 void
 cmd_putval(CephContext *cct, cmdmap_t& cmdmap, std::string_view k, const T& val)