regex-instance: HalInterface: add regex API and hide public fields

<regex-instance> is added under an <interface> tag,
which is represented by an HalInterface object. Add
API for looping over all <regex-instance>s / <instance>s
under it.

With this API, HalInterface can hide its public fields.

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

Change-Id: Ia072dd7e946c28789797db8a46fd968bc7872dca
Merged-In: Ia072dd7e946c28789797db8a46fd968bc7872dca
diff --git a/CompatibilityMatrix.cpp b/CompatibilityMatrix.cpp
index 5b216f7..965923d 100644
--- a/CompatibilityMatrix.cpp
+++ b/CompatibilityMatrix.cpp
@@ -117,7 +117,8 @@
         auto existingHals = getHals(name);
 
         halToAdd.forEachInstance([&](const std::vector<VersionRange>& versionRanges,
-                                     const std::string& interface, const std::string& instance) {
+                                     const std::string& interface, const std::string& instance,
+                                     bool /* isRegex */) {
             for (auto* existingHal : existingHals) {
                 MatrixHal* splitInstance = this->splitInstance(existingHal, interface, instance);
                 if (splitInstance != nullptr) {
@@ -133,7 +134,7 @@
             halToAdd.removeInstance(pair.first, pair.second);
         }
 
-        if (halToAdd.hasAnyInstance()) {
+        if (halToAdd.instancesCount() > 0) {
             halToAdd.setOptional(true);
             if (!add(std::move(halToAdd))) {
                 if (error) {