From 9cd9eb0f06e77347beaf141c011fb1989af82475 Mon Sep 17 00:00:00 2001 From: Yifan Hong Date: Wed, 17 May 2017 18:36:08 -0700 Subject: Add HalInterface to compatibility matrix Test: libvintf_test Test: vintf_object_test Bug: 38395193 Change-Id: I6dfc21bbfb63b575558405e441f3926ff3813eb8 Merged-In: I6dfc21bbfb63b575558405e441f3926ff3813eb8 --- parse_xml.cpp | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'parse_xml.cpp') diff --git a/parse_xml.cpp b/parse_xml.cpp index 7287604..8caab4f 100644 --- a/parse_xml.cpp +++ b/parse_xml.cpp @@ -470,14 +470,25 @@ struct MatrixHalConverter : public XmlNodeConverter { appendAttr(root, "optional", hal.optional); appendTextElement(root, "name", hal.name, d); appendChildren(root, versionRangeConverter, hal.versionRanges, d); + appendChildren(root, halInterfaceConverter, iterateValues(hal.interfaces), d); } bool buildObject(MatrixHal *object, NodeType *root) const override { + std::vector interfaces; if (!parseOptionalAttr(root, "format", HalFormat::HIDL, &object->format) || !parseOptionalAttr(root, "optional", false /* defaultValue */, &object->optional) || !parseTextElement(root, "name", &object->name) || - !parseChildren(root, versionRangeConverter, &object->versionRanges)) { + !parseChildren(root, versionRangeConverter, &object->versionRanges) || + !parseChildren(root, halInterfaceConverter, &interfaces)) { return false; } + for (auto&& interface : interfaces) { + std::string name{interface.name}; + auto res = object->interfaces.emplace(std::move(name), std::move(interface)); + if (!res.second) { + this->mLastError = "Duplicated instance entry " + res.first->first; + return false; + } + } return true; } }; -- cgit v1.2.3-54-g00ecf