CompatibilityMatrix::addAllXmlFilesAsOptional

Similar to addAllHalsAsOptional, addAllXmlFilesAsOptional
adds <xmlfile> entries from higher FCM Versions to
lower FCM Versions.

Test: libvintf_test

Change-Id: I0b5244d209eda2409f2a1a04dd84ce620abc0374
diff --git a/CompatibilityMatrix.cpp b/CompatibilityMatrix.cpp
index 264b905..7afaa9b 100644
--- a/CompatibilityMatrix.cpp
+++ b/CompatibilityMatrix.cpp
@@ -135,6 +135,25 @@
     return true;
 }
 
+bool CompatibilityMatrix::addAllXmlFilesAsOptional(CompatibilityMatrix* other, std::string* error) {
+    if (other == nullptr || other->level() <= level()) {
+        return true;
+    }
+    for (auto& pair : other->mXmlFiles) {
+        const std::string& name = pair.first;
+        MatrixXmlFile& xmlFileToAdd = pair.second;
+
+        xmlFileToAdd.mOptional = true;
+        if (!addXmlFile(std::move(xmlFileToAdd))) {
+            if (error) {
+                *error = "Cannot add XML File " + name + " for unknown reason.";
+            }
+            return false;
+        }
+    }
+    return true;
+}
+
 bool operator==(const CompatibilityMatrix &lft, const CompatibilityMatrix &rgt) {
     return lft.mType == rgt.mType && lft.mLevel == rgt.mLevel && lft.mHals == rgt.mHals &&
            lft.mXmlFiles == rgt.mXmlFiles &&