From 69e3ca5ec75eb02be545053aab86ba246530d6cb Mon Sep 17 00:00:00 2001 From: Ilya Lavrenov Date: Thu, 4 Feb 2021 08:42:16 +0300 Subject: [PATCH] Re-used XML utils (#4170) --- .../src/cldnn_engine/cldnn_custom_layer.cpp | 8 +++---- .../hetero_executable_network.cpp | 21 +++++++------------ .../src/inference_engine/ie_core.cpp | 9 +++----- .../src/readers/ir_reader/ie_ir_parser.cpp | 2 +- .../readers/ir_reader_v7/ie_format_parser.cpp | 4 ++-- .../src/frontend/custom_kernel.cpp | 8 +++---- .../src/frontend/custom_layer.cpp | 2 +- 7 files changed, 22 insertions(+), 32 deletions(-) diff --git a/inference-engine/src/cldnn_engine/cldnn_custom_layer.cpp b/inference-engine/src/cldnn_engine/cldnn_custom_layer.cpp index 09032abd914..523187dc64b 100644 --- a/inference-engine/src/cldnn_engine/cldnn_custom_layer.cpp +++ b/inference-engine/src/cldnn_engine/cldnn_custom_layer.cpp @@ -53,7 +53,7 @@ void CLDNNCustomLayer::ProcessKernelNode(const pugi::xml_node & node) { CheckAndReturnError(m_kernelEntry.length() == 0, "No Kernel entry in layer: " << GetStrAttr(node.parent(), "name")); // Handle Source nodes - for (auto sourceNode = node.child("Source"); !sourceNode.empty(); sourceNode = sourceNode.next_sibling("Source")) { + FOREACH_CHILD(sourceNode, node, "Source") { // open file std::string filename = m_configDir + "/" + GetStrAttr(sourceNode, "filename", ""); std::ifstream inputFile(filename); @@ -74,7 +74,7 @@ void CLDNNCustomLayer::ProcessKernelNode(const pugi::xml_node & node) { } // Handle Define nodes - for (auto defineNode = node.child("Define"); !defineNode.empty(); defineNode = defineNode.next_sibling("Define")) { + FOREACH_CHILD(defineNode, node, "Define") { KernelDefine kd; kd.name = GetStrAttr(defineNode, "name", ""); CheckAndReturnError((kd.name.length() == 0), "Missing name for define node"); @@ -91,7 +91,7 @@ void CLDNNCustomLayer::ProcessKernelNode(const pugi::xml_node & node) { void CLDNNCustomLayer::ProcessBuffersNode(const pugi::xml_node & node) { CheckNodeTypeAndReturnError(node, "Buffers"); - for (auto tensorNode = node.child("Tensor"); !tensorNode.empty(); tensorNode = tensorNode.next_sibling("Tensor")) { + FOREACH_CHILD(tensorNode, node, "Tensor") { KerenlParam kp; kp.format = FormatFromString(GetStrAttr(tensorNode, "format", "BFYX")); CheckAndReturnError(kp.format == cldnn::format::format_num, "Tensor node has an invalid format: " << GetStrAttr(tensorNode, "format")); @@ -109,7 +109,7 @@ void CLDNNCustomLayer::ProcessBuffersNode(const pugi::xml_node & node) { } m_kernelParams.push_back(kp); } - for (auto dataNode = node.child("Data"); !dataNode.empty(); dataNode = dataNode.next_sibling("Data")) { + FOREACH_CHILD(dataNode, node, "Data") { KerenlParam kp; kp.type = ParamType::Data; kp.paramIndex = GetIntAttr(dataNode, "arg-index", -1); diff --git a/inference-engine/src/hetero_plugin/hetero_executable_network.cpp b/inference-engine/src/hetero_plugin/hetero_executable_network.cpp index 1205efb3d2b..6241118511a 100644 --- a/inference-engine/src/hetero_plugin/hetero_executable_network.cpp +++ b/inference-engine/src/hetero_plugin/hetero_executable_network.cpp @@ -441,28 +441,24 @@ HeteroExecutableNetwork::HeteroExecutableNetwork(std::istream& std::unordered_set networkInputs; pugi::xml_node inputsNode = heteroNode.child("inputs"); - for (auto inputNode = inputsNode.child("input"); !inputNode.empty(); - inputNode = inputNode.next_sibling("input")) { + FOREACH_CHILD(inputNode, inputsNode, "input") { networkInputs.insert(GetStrAttr(inputNode, "name")); } std::unordered_set networkOutputs; pugi::xml_node outputsNode = heteroNode.child("outputs"); - for (auto outputNode = outputsNode.child("output"); !outputNode.empty(); - outputNode = outputNode.next_sibling("output")) { + FOREACH_CHILD(outputNode, outputsNode, "output") { networkOutputs.insert(GetStrAttr(outputNode, "name")); } Engine::Configs importedConfigs; auto configsNode = heteroNode.child("configs"); - for (auto configNode = configsNode.child("config"); !configNode.empty(); - configNode = configNode.next_sibling("config")) { + FOREACH_CHILD(configNode, configsNode, "config") { importedConfigs.emplace(GetStrAttr(configNode, "key"), GetStrAttr(configNode, "value")); } auto blobNamesNode = heteroNode.child("blob_names_map"); - for (auto blobNameNode = blobNamesNode.child("blob_name_map"); !blobNameNode.empty(); - blobNameNode = blobNameNode.next_sibling("blob_name_map")) { + FOREACH_CHILD(blobNameNode, blobNamesNode, "blob_name_map") { _blobNameMap.emplace(GetStrAttr(blobNameNode, "key"), GetStrAttr(blobNameNode, "value")); } @@ -472,8 +468,7 @@ HeteroExecutableNetwork::HeteroExecutableNetwork(std::istream& std::vector descs; pugi::xml_node subnetworksNode = heteroNode.child("subnetworks"); - for (auto subnetworkNode = subnetworksNode.child("subnetwork"); !subnetworkNode.empty(); - subnetworkNode = subnetworkNode.next_sibling("subnetwork")) { + FOREACH_CHILD(subnetworkNode, subnetworksNode, "subnetwork") { auto deviceName = GetStrAttr(subnetworkNode, "device"); auto metaDevices = _heteroPlugin->GetDevicePlugins(deviceName, importedConfigs); @@ -508,16 +503,14 @@ HeteroExecutableNetwork::HeteroExecutableNetwork(std::istream& cnnnetwork = _heteroPlugin->GetCore()->ReadNetwork(xmlString, std::move(dataBlob)); auto inputs = cnnnetwork.getInputsInfo(); auto inputsNode = subnetworkNode.child("inputs"); - for (auto inputNode = inputsNode.child("input"); !inputNode.empty(); - inputNode = inputNode.next_sibling("input")) { + FOREACH_CHILD(inputNode, inputsNode, "input") { auto inputName = GetStrAttr(inputNode, "name"); inputs[inputName]->setPrecision(Precision::FromStr(GetStrAttr(inputNode, "precision"))); } auto outputs = cnnnetwork.getOutputsInfo(); auto outputsNode = subnetworkNode.child("outputs"); - for (auto outputNode = outputsNode.child("output"); !outputNode.empty(); - outputNode = outputNode.next_sibling("output")) { + FOREACH_CHILD(outputNode, outputsNode, "output") { auto outputName = GetStrAttr(outputNode, "name"); outputs[outputName]->setPrecision(Precision::FromStr(GetStrAttr(outputNode, "precision"))); } diff --git a/inference-engine/src/inference_engine/ie_core.cpp b/inference-engine/src/inference_engine/ie_core.cpp index b082d5a50b4..b5bb82116cb 100644 --- a/inference-engine/src/inference_engine/ie_core.cpp +++ b/inference-engine/src/inference_engine/ie_core.cpp @@ -192,8 +192,7 @@ public: pugi::xml_node ieNode = xmlDoc.document_element(); pugi::xml_node devicesNode = ieNode.child("plugins"); - for (auto pluginNode = devicesNode.child("plugin"); !pluginNode.empty(); - pluginNode = pluginNode.next_sibling("plugin")) { + FOREACH_CHILD(pluginNode, devicesNode, "plugin") { std::string deviceName = GetStrAttr(pluginNode, "name"); FileUtils::FilePath pluginPath = FileUtils::toFilePath(GetStrAttr(pluginNode, "location").c_str()); @@ -212,8 +211,7 @@ public: std::map config; if (propertiesNode) { - for (auto propertyNode = propertiesNode.child("property"); !propertyNode.empty(); - propertyNode = propertyNode.next_sibling("property")) { + FOREACH_CHILD(propertyNode, propertiesNode, "property") { std::string key = GetStrAttr(propertyNode, "key"); std::string value = GetStrAttr(propertyNode, "value"); config[key] = value; @@ -225,8 +223,7 @@ public: std::vector listOfExtentions; if (extensionsNode) { - for (auto extensionNode = extensionsNode.child("extension"); !extensionNode.empty(); - extensionNode = extensionNode.next_sibling("extension")) { + FOREACH_CHILD(extensionNode, extensionsNode, "extension") { FileUtils::FilePath extensionLocation = FileUtils::toFilePath(GetStrAttr(extensionNode, "location").c_str()); listOfExtentions.push_back(extensionLocation); } diff --git a/inference-engine/src/readers/ir_reader/ie_ir_parser.cpp b/inference-engine/src/readers/ir_reader/ie_ir_parser.cpp index c42b5e35358..e8825a75865 100644 --- a/inference-engine/src/readers/ir_reader/ie_ir_parser.cpp +++ b/inference-engine/src/readers/ir_reader/ie_ir_parser.cpp @@ -608,7 +608,7 @@ V10Parser::GenericLayerParams V10Parser::XmlDeserializer::parseGenericParams(con port.portId = GetIntAttr(parentNode, "id"); - for (auto node = parentNode.child("dim"); !node.empty(); node = node.next_sibling("dim")) { + FOREACH_CHILD(node, parentNode, "dim") { size_t dim = 0; const pugi::char_t* dimVal = node.child_value(); std::stringstream ss(dimVal); diff --git a/inference-engine/src/readers/ir_reader_v7/ie_format_parser.cpp b/inference-engine/src/readers/ir_reader_v7/ie_format_parser.cpp index cc0310d70c3..90016b9790c 100644 --- a/inference-engine/src/readers/ir_reader_v7/ie_format_parser.cpp +++ b/inference-engine/src/readers/ir_reader_v7/ie_format_parser.cpp @@ -286,7 +286,7 @@ CNNNetworkImplPtr FormatParser::Parse(pugi::xml_node& root) { std::vector inputLayers; int nodeCnt = 0; std::map layerById; - for (auto node = allLayersNode.child("layer"); !node.empty(); node = node.next_sibling("layer")) { + FOREACH_CHILD(node, allLayersNode, "layer") { LayerParseParameters lprms; ParseGenericParams(node, lprms); @@ -578,7 +578,7 @@ void FormatParser::SetWeights(const TBlob::Ptr& weights) { } void FormatParser::ParseDims(SizeVector& dims, const pugi::xml_node& parentNode) const { - for (auto node = parentNode.child("dim"); !node.empty(); node = node.next_sibling("dim")) { + FOREACH_CHILD(node, parentNode, "dim") { unsigned int dim = 0; const pugi::char_t* dimVal = node.child_value(); stringstream ss(dimVal); diff --git a/inference-engine/src/vpu/graph_transformer/src/frontend/custom_kernel.cpp b/inference-engine/src/vpu/graph_transformer/src/frontend/custom_kernel.cpp index 55fdf990ff3..3bc0082f76b 100644 --- a/inference-engine/src/vpu/graph_transformer/src/frontend/custom_kernel.cpp +++ b/inference-engine/src/vpu/graph_transformer/src/frontend/custom_kernel.cpp @@ -196,7 +196,7 @@ CustomKernel::CustomKernel(const pugi::xml_node& kernel, std::string configDir): _maxShaves = XMLParseUtils::GetIntAttr(kernel, "max-shaves", 0); std::string fileName; - for (auto source = kernel.child("Source"); !source.empty(); source = source.next_sibling("Source")) { + FOREACH_CHILD(source, kernel, "Source") { fileName = _configDir + "/" + XMLParseUtils::GetStrAttr(source, "filename", ""); std::ifstream inputFile(fileName, std::ios::binary); @@ -307,7 +307,7 @@ void CustomKernel::processParametersNode(const pugi::xml_node& node) { const auto cmp = ie::details::CaselessEq {}; const auto parameters = node.child("Parameters"); - for (auto tensor = parameters.child("Tensor"); !tensor.empty(); tensor = tensor.next_sibling("Tensor")) { + FOREACH_CHILD(tensor, parameters, "Tensor") { KernelParam kp; auto typeStr = XMLParseUtils::GetStrAttr(tensor, "type"); @@ -340,7 +340,7 @@ void CustomKernel::processParametersNode(const pugi::xml_node& node) { _kernelParams.push_back(std::move(kp)); } - for (auto data = parameters.child("Data"); !data.empty(); data = data.next_sibling("Data")) { + FOREACH_CHILD(data, parameters, "Data") { KernelParam kp; auto typeStr = XMLParseUtils::GetStrAttr(data, "type"); @@ -377,7 +377,7 @@ void CustomKernel::processParametersNode(const pugi::xml_node& node) { _kernelParams.push_back(std::move(kp)); } - for (auto scalar = parameters.child("Scalar"); !scalar.empty(); scalar = scalar.next_sibling("Scalar")) { + FOREACH_CHILD(scalar, parameters, "Scalar") { KernelParam kp; const auto type = XMLParseUtils::GetStrAttr(scalar, "type"); diff --git a/inference-engine/src/vpu/graph_transformer/src/frontend/custom_layer.cpp b/inference-engine/src/vpu/graph_transformer/src/frontend/custom_layer.cpp index 9c6cd3254c3..82d237b1cdb 100644 --- a/inference-engine/src/vpu/graph_transformer/src/frontend/custom_layer.cpp +++ b/inference-engine/src/vpu/graph_transformer/src/frontend/custom_layer.cpp @@ -160,7 +160,7 @@ CustomLayer::CustomLayer(std::string configDir, const pugi::xml_node& customLaye assertOneOrMoreOccurrence(customLayer, {"Kernel"}); auto kernelNodes = [&] { auto nodes = SmallVector{}; - for (auto kernel = customLayer.child("Kernel"); !kernel.empty(); kernel = kernel.next_sibling("Kernel")) { + FOREACH_CHILD(kernel, customLayer, "Kernel") { assertExactlyOneOccurrence(kernel, {"Parameters", "WorkSizes"}); assertOneOrMoreOccurrence(kernel, {"Source"}); nodes.push_back(kernel);