sim: Implement optParamIn using paramIn.
authorGabe Black <gabe.black@gmail.com>
Wed, 21 Oct 2020 01:46:02 +0000 (18:46 -0700)
committerGabe Black <gabe.black@gmail.com>
Wed, 21 Oct 2020 22:54:39 +0000 (22:54 +0000)
This means only paramIn needs to be specialized, and then optParamIn
will be as well for free. It also removes some duplicate implementation.

Change-Id: Id124a05d04e1c0897121d0e13dd46efe90e8eed0
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36276
Reviewed-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Giacomo Travaglini <giacomo.travaglini@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Tested-by: kokoro <noreply+kokoro@google.com>
src/sim/serialize.hh

index bbc91d7b5dd47337a93a6c0c7df9537a2f5181cf..6c06eeb25c918a790349a568071a9e4d38d5b469 100644 (file)
@@ -471,22 +471,13 @@ paramOut(CheckpointOut &os, const std::string &name, const T &param)
     os << "\n";
 }
 
-/**
- * This function is used for restoring parameters from a checkpoint.
- * @param os The checkpoint to be restored from.
- * @param name Name of the parameter to be set.
- * @param param Value of the parameter to be restored.
- * @ingroup api_serialize
- */
 template <class T>
-void
-paramIn(CheckpointIn &cp, const std::string &name, T &param)
+bool
+paramInImpl(CheckpointIn &cp, const std::string &name, T &param)
 {
     const std::string &section(Serializable::currentSection());
     std::string str;
-    if (!cp.find(section, name, str) || !parseParam(str, param)) {
-        fatal("Can't unserialize '%s:%s'\n", section, name);
-    }
+    return cp.find(section, name, str) && parseParam(str, param);
 }
 
 /**
@@ -495,8 +486,8 @@ paramIn(CheckpointIn &cp, const std::string &name, T &param)
  * @param cp The checkpoint to be written to.
  * @param name Name of the parameter to be written.
  * @param param Value of the parameter to be written.
- * @param warn If the warn is set to true then the function prints the warning
- * message.
+ * @param do_warn If the do_warn is set to true then the function prints the
+ * warning message.
  * @return If the parameter we are searching for does not exist
  * the function returns false else it returns true.
  *
@@ -504,18 +495,30 @@ paramIn(CheckpointIn &cp, const std::string &name, T &param)
  */
 template <class T>
 bool
-optParamIn(CheckpointIn &cp, const std::string &name,
-           T &param, bool warn = true)
+optParamIn(CheckpointIn &cp, const std::string &name, T &param,
+           bool do_warn=true)
 {
-    const std::string &section(Serializable::currentSection());
-    std::string str;
-    if (!cp.find(section, name, str) || !parseParam(str, param)) {
-        if (warn)
-            warn("optional parameter %s:%s not present\n", section, name);
-        return false;
-    } else {
+    if (paramInImpl(cp, name, param))
         return true;
-    }
+
+    warn_if(do_warn, "optional parameter %s:%s not present",
+            Serializable::currentSection(), name);
+    return false;
+}
+
+/**
+ * This function is used for restoring parameters from a checkpoint.
+ * @param os The checkpoint to be restored from.
+ * @param name Name of the parameter to be set.
+ * @param param Value of the parameter to be restored.
+ * @ingroup api_serialize
+ */
+template <class T>
+void
+paramIn(CheckpointIn &cp, const std::string &name, T &param)
+{
+    fatal_if(!paramInImpl(cp, name, param),
+        "Can't unserialize '%s:%s'", Serializable::currentSection(), name);
 }
 
 /**