Implement sepolicy section in compatibility-matrix.

* kernel-sepolicy-version will be checked against
  security_policyvers().
* sepolicy-version is not yet defined; put a placeholder
  entry so that it parses the compatibility matrix XML
  file correctly.

Test: libvintf_test
Change-Id: I41f69623728deedd00c511e6b99f43697c9eeda8
diff --git a/parse_xml.cpp b/parse_xml.cpp
index 328de3d..1489316 100644
--- a/parse_xml.cpp
+++ b/parse_xml.cpp
@@ -433,13 +433,20 @@
 const ManifestHalConverter manifestHalConverter{};
 const XmlConverter<ManifestHal> &gManifestHalConverter = manifestHalConverter;
 
+const XmlTextConverter<KernelSepolicyVersion> kernelSepolicyVersionConverter{"kernel-sepolicy-version"};
+const XmlTextConverter<SepolicyVersion> sepolicyVersionConverter{"sepolicy-version"};
+
 struct SepolicyConverter : public XmlNodeConverter<Sepolicy> {
     std::string elementName() const override { return "sepolicy"; }
-    void mutateNode(const Sepolicy &, NodeType *, DocType *) const override {
-        // TODO after writing sepolicy
+    void mutateNode(const Sepolicy &object, NodeType *root, DocType *d) const override {
+        appendChild(root, kernelSepolicyVersionConverter(object.kernelSepolicyVersion(), d));
+        appendChild(root, sepolicyVersionConverter(object.sepolicyVersion(), d));
     }
-    bool buildObject(Sepolicy *, NodeType *) const override {
-        // TODO after writing sepolicy
+    bool buildObject(Sepolicy *object, NodeType *root) const override {
+        if (!parseChild(root, kernelSepolicyVersionConverter, &object->mKernelSepolicyVersion) ||
+            !parseChild(root, sepolicyVersionConverter, &object->mSepolicyVersion)) {
+            return false;
+        }
         return true;
     }
 };