SerializeFlags is a namespace.

The SerializeFlags becomes a namespace that contains
the original class definition under type SerializeFlags::Type
and static constants.

Consequently, all SeralizeFlags methods can
now be constexpr.

Also added static tests.

Test: libvintf_test
Test: vintf_object_test
Bug: 110711640
Change-Id: I786a1f77e19defc2ab2d025de3ed7cfe48f4fbce
diff --git a/parse_xml.cpp b/parse_xml.cpp
index ff6ecc2..0cc514d 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -141,7 +141,7 @@
 
     // sub-types should implement these.
     virtual void mutateNode(const Object &o, NodeType *n, DocType *d) const = 0;
-    virtual void mutateNode(const Object& o, NodeType* n, DocType* d, SerializeFlags) const {
+    virtual void mutateNode(const Object& o, NodeType* n, DocType* d, SerializeFlags::Type) const {
         mutateNode(o, n, d);
     }
     virtual bool buildObject(Object* o, NodeType* n, std::string* error) const = 0;
@@ -150,12 +150,12 @@
     // convenience methods for user
     inline const std::string& lastError() const override { return mLastError; }
     inline NodeType* serialize(const Object& o, DocType* d,
-                               SerializeFlags flags = SerializeFlags::EVERYTHING) const {
+                               SerializeFlags::Type flags = SerializeFlags::EVERYTHING) const {
         NodeType *root = createNode(this->elementName(), d);
         this->mutateNode(o, root, d, flags);
         return root;
     }
-    inline std::string serialize(const Object& o, SerializeFlags flags) const override {
+    inline std::string serialize(const Object& o, SerializeFlags::Type flags) const override {
         DocType *doc = createDocument();
         appendChild(doc, serialize(o, doc, flags));
         std::string s = printDocument(doc);
@@ -192,7 +192,7 @@
     inline NodeType *operator()(const Object &o, DocType *d) const {
         return serialize(o, d);
     }
-    inline std::string operator()(const Object& o, SerializeFlags flags) const override {
+    inline std::string operator()(const Object& o, SerializeFlags::Type flags) const override {
         return serialize(o, flags);
     }
     inline bool operator()(Object* o, NodeType* node) { return deserialize(o, node); }
@@ -234,7 +234,7 @@
     template <typename T, typename Array>
     inline void appendChildren(NodeType* parent, const XmlNodeConverter<T>& conv,
                                const Array& array, DocType* d,
-                               SerializeFlags flags = SerializeFlags::EVERYTHING) const {
+                               SerializeFlags::Type flags = SerializeFlags::EVERYTHING) const {
         for (const T &t : array) {
             appendChild(parent, conv.serialize(t, d, flags));
         }
@@ -605,7 +605,7 @@
         mutateNode(kernel, root, d, SerializeFlags::EVERYTHING);
     }
     void mutateNode(const MatrixKernel& kernel, NodeType* root, DocType* d,
-                    SerializeFlags flags) const override {
+                    SerializeFlags::Type flags) const override {
         KernelVersion kv = kernel.mMinLts;
         if (!flags.isKernelMinorRevisionEnabled()) {
             kv.minorRev = 0u;
@@ -640,7 +640,7 @@
         mutateNode(m, root, d, SerializeFlags::EVERYTHING);
     }
     void mutateNode(const ManifestHal& hal, NodeType* root, DocType* d,
-                    SerializeFlags flags) const override {
+                    SerializeFlags::Type flags) const override {
         appendAttr(root, "format", hal.format);
         appendTextElement(root, "name", hal.name, d);
         appendChild(root, transportArchConverter(hal.transportArch, d));
@@ -864,7 +864,7 @@
         mutateNode(m, root, d, SerializeFlags::EVERYTHING);
     }
     void mutateNode(const HalManifest& m, NodeType* root, DocType* d,
-                    SerializeFlags flags) const override {
+                    SerializeFlags::Type flags) const override {
         if (flags.isMetaVersionEnabled()) {
             appendAttr(root, "version", m.getMetaVersion());
         }
@@ -1031,7 +1031,7 @@
         mutateNode(m, root, d, SerializeFlags::EVERYTHING);
     }
     void mutateNode(const CompatibilityMatrix& m, NodeType* root, DocType* d,
-                    SerializeFlags flags) const override {
+                    SerializeFlags::Type flags) const override {
         if (flags.isMetaVersionEnabled()) {
             appendAttr(root, "version", m.getMinimumMetaVersion());
         }