Instance is the smallest unit of manifests/matrices.
Introduce forEachInstance on HalManifest and CompatibilityMatrix,
because <hal> are no longer the smallest unit of tests, but
rather a ManifestInstance / MatrixInstance object.
Bug: 73556059
Bug: 74247301
Test: libvintf_test
Test: vintf_object_test
Change-Id: If7186617db52acd67f255ac6e6c99f34a7570206
Merged-In: If7186617db52acd67f255ac6e6c99f34a7570206
diff --git a/CompatibilityMatrix.cpp b/CompatibilityMatrix.cpp
index deb1fa1..bf83a98 100644
--- a/CompatibilityMatrix.cpp
+++ b/CompatibilityMatrix.cpp
@@ -312,20 +312,19 @@
return matrix;
}
-void CompatibilityMatrix::forEachInstance(
- const std::function<void(const std::string&, const VersionRange&, const std::string&,
- const std::string&, bool, bool*)>& f) const {
- bool stop = false;
- for (const auto& hal : getHals()) {
- for (const auto& v : hal.versionRanges) {
- for (const auto& intf : iterateValues(hal.interfaces)) {
- for (const auto& instance : intf.instances) {
- f(hal.name, v, intf.name, instance, hal.optional, &stop);
- if (stop) break;
- }
+bool CompatibilityMatrix::forEachInstanceOfVersion(
+ const std::string& package, const Version& expectVersion,
+ const std::function<bool(const MatrixInstance&)>& func) const {
+ for (const MatrixHal* hal : getHals(package)) {
+ bool cont = hal->forEachInstance([&](const MatrixInstance& matrixInstance) {
+ if (matrixInstance.versionRange().contains(expectVersion)) {
+ return func(matrixInstance);
}
- }
+ return true;
+ });
+ if (!cont) return false;
}
+ return true;
}
} // namespace vintf