base,sim: Move BitUnion serialization support to bitunion.hh.
authorGabe Black <gabe.black@gmail.com>
Wed, 21 Oct 2020 02:53:47 +0000 (19:53 -0700)
committerGabe Black <gabe.black@gmail.com>
Thu, 22 Oct 2020 22:02:26 +0000 (22:02 +0000)
This keeps the BitUnion code centralized and out of the generic
serialization code.

Change-Id: I297638df4f8908096b7c439298fbaf03236f9011
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/36283
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>

src/base/bitunion.hh
src/sim/serialize_handlers.hh

index bf183ae0ed6d46923452c18d28cd37b8ed9748f2..aef6f6ec6980d67059bafdb28ea113bbbed43145 100644 (file)
@@ -35,6 +35,7 @@
 #include <typeinfo>
 
 #include "base/bitfield.hh"
+#include "sim/serialize_handlers.hh"
 
 //      The following implements the BitUnion system of defining bitfields
 //on top of an underlying class. This is done through the pervasive use of
@@ -505,4 +506,30 @@ operator << (std::ostream &os, const BitUnionType<T> &bu)
             os, (BitUnionBaseType<T>)bu);
 }
 
+// Specialization for BitUnion types.
+template <class T>
+struct ParseParam<BitUnionType<T>>
+{
+    static bool
+    parse(const std::string &s, BitUnionType<T> &value)
+    {
+        // Zero initialize storage to avoid leaking an uninitialized value
+        BitUnionBaseType<T> storage = BitUnionBaseType<T>();
+        auto res = to_number(s, storage);
+        value = storage;
+        return res;
+    }
+};
+
+template <class T>
+struct ShowParam<BitUnionType<T>>
+{
+    static void
+    show(std::ostream &os, const BitUnionType<T> &value)
+    {
+        ShowParam<BitUnionBaseType<T>>::show(
+                os, static_cast<const BitUnionBaseType<T> &>(value));
+    }
+};
+
 #endif // __BASE_BITUNION_HH__
index e09712140ae5d9239ab8b05e5a84de2b67e84ae8..8efd895ba4c8fc5fb7271ef29d14be87c6f630bc 100644 (file)
@@ -50,7 +50,6 @@
 #include <iterator>
 #include <type_traits>
 
-#include "base/bitunion.hh"
 #include "base/str.hh"
 
 /**
@@ -108,21 +107,6 @@ struct ParseParam<std::string>
     }
 };
 
-// Specialization for BitUnion types.
-template <class T>
-struct ParseParam<BitUnionType<T>>
-{
-    static bool
-    parse(const std::string &s, BitUnionType<T> &value)
-    {
-        // Zero initialize storage to avoid leaking an uninitialized value
-        BitUnionBaseType<T> storage = BitUnionBaseType<T>();
-        auto res = to_number(s, storage);
-        value = storage;
-        return res;
-    }
-};
-
 /*
  * A structure which should be specialized to contain a static method with the
  * signature:
@@ -168,17 +152,6 @@ struct ShowParam<bool>
     }
 };
 
-template <class T>
-struct ShowParam<BitUnionType<T>>
-{
-    static void
-    show(std::ostream &os, const BitUnionType<T> &value)
-    {
-        ShowParam<BitUnionBaseType<T>>::show(
-                os, static_cast<const BitUnionBaseType<T> &>(value));
-    }
-};
-
 /** @} */
 
 #endif // __SERIALIZE_HANDLERS_HH__