regex-instance: MatrixInstance: add regex API.

CompatibilityMatrix::forEachInstance() returns this object.
Add regex API to MatrixInstance so that regex pattern matching
can be used.

Bug: 73738616
Test: libvintf_test
Test: vintf_object_test
Test: vts_treble_vintf_test

Change-Id: Id5a3ecdf850309135751891bf010529d9d40d5a0
diff --git a/MatrixInstance.cpp b/MatrixInstance.cpp
index 0ac3681..dd007dd 100644
--- a/MatrixInstance.cpp
+++ b/MatrixInstance.cpp
@@ -31,12 +31,16 @@
 
 MatrixInstance& MatrixInstance::operator=(MatrixInstance&&) = default;
 
-MatrixInstance::MatrixInstance(FqInstance&& fqInstance, VersionRange&& range, bool optional)
-    : mFqInstance(std::move(fqInstance)), mRange(std::move(range)), mOptional(optional) {}
+MatrixInstance::MatrixInstance(FqInstance&& fqInstance, VersionRange&& range, bool optional,
+                               bool isRegex)
+    : mFqInstance(std::move(fqInstance)),
+      mRange(std::move(range)),
+      mOptional(optional),
+      mIsRegex(isRegex) {}
 
 MatrixInstance::MatrixInstance(const FqInstance fqInstance, const VersionRange& range,
-                               bool optional)
-    : mFqInstance(fqInstance), mRange(range), mOptional(optional) {}
+                               bool optional, bool isRegex)
+    : mFqInstance(fqInstance), mRange(range), mOptional(optional), mIsRegex(isRegex) {}
 
 const std::string& MatrixInstance::package() const {
     return mFqInstance.getPackage();
@@ -61,7 +65,27 @@
 bool MatrixInstance::isSatisfiedBy(const FqInstance& provided) const {
     return package() == provided.getPackage() &&
            versionRange().supportedBy(provided.getVersion()) &&
-           interface() == provided.getInterface() && instance() == provided.getInstance();
+           interface() == provided.getInterface() && matchInstance(provided.getInstance());
+}
+
+bool MatrixInstance::matchInstance(const std::string& e) const {
+    if (!isRegex()) {
+        return exactInstance() == e;
+    }
+    return false;  // FIXME: do matching.
+}
+
+const std::string& MatrixInstance::regexPattern() const {
+    static const std::string kEmptyString;
+    return kEmptyString;
+}
+
+const std::string& MatrixInstance::exactInstance() const {
+    return mFqInstance.getInstance();
+}
+
+bool MatrixInstance::isRegex() const {
+    return mIsRegex;
 }
 
 }  // namespace vintf