sim: Use the new BitUnion templates in serialize.hh.
authorGabe Black <gabeblack@google.com>
Mon, 8 Jan 2018 03:35:40 +0000 (19:35 -0800)
committerGabe Black <gabeblack@google.com>
Sat, 20 Jan 2018 07:30:10 +0000 (07:30 +0000)
serialize.hh should not reference internal implementation details in
the underlying BitUnion types.

Change-Id: I1ce29243db63801b7788f037fdc54811bdab889c
Reviewed-on: https://gem5-review.googlesource.com/7203
Maintainer: Gabe Black <gabeblack@google.com>
Reviewed-by: Jason Lowe-Power <jason@lowepower.com>
src/sim/serialize.hh

index b6c026394c22dfe219a86f15f1f3b6556f69e0b6..024d29cbbd7d24150e37ddaf965fb5d6919abcc2 100644 (file)
@@ -72,33 +72,41 @@ typedef std::ostream CheckpointOut;
 template <class T>
 void paramOut(CheckpointOut &cp, const std::string &name, const T &param);
 
-template <typename BitUnion>
-void paramOut(CheckpointOut &cp, const std::string &name,
-              const BitfieldBackend::BitUnionOperators<BitUnion> &p)
+template <typename T>
+void
+paramOut(CheckpointOut &cp, const std::string &name, const BitUnionType<T> &p)
 {
-    paramOut(cp, name, p.__storage);
+    paramOut(cp, name, static_cast<BitUnionBaseType<T> >(p));
 }
 
 template <class T>
 void paramIn(CheckpointIn &cp, const std::string &name, T &param);
 
-template <typename BitUnion>
-void paramIn(CheckpointIn &cp, const std::string &name,
-             BitfieldBackend::BitUnionOperators<BitUnion> &p)
+template <typename T>
+void
+paramIn(CheckpointIn &cp, const std::string &name, BitUnionType<T> &p)
 {
-    paramIn(cp, name, p.__storage);
+    BitUnionBaseType<T> b;
+    paramIn(cp, name, b);
+    p = b;
 }
 
 template <class T>
 bool optParamIn(CheckpointIn &cp, const std::string &name, T &param,
                 bool warn = true);
 
-template <typename BitUnion>
-bool optParamIn(CheckpointIn &cp, const std::string &name,
-                BitfieldBackend::BitUnionOperators<BitUnion> &p,
-                bool warn = true)
+template <typename T>
+bool
+optParamIn(CheckpointIn &cp, const std::string &name,
+           BitUnionType<T> &p, bool warn = true)
 {
-    return optParamIn(cp, name, p.__storage, warn);
+    BitUnionBaseType<T> b;
+    if (optParamIn(cp, name, b, warn)) {
+        p = b;
+        return true;
+    } else {
+        return false;
+    }
 }
 
 template <class T>