Re-used XML utils (#4170)
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -441,28 +441,24 @@ HeteroExecutableNetwork::HeteroExecutableNetwork(std::istream&
|
||||
|
||||
std::unordered_set<std::string> 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<std::string> 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<NetworkDesc> 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")));
|
||||
}
|
||||
|
||||
@@ -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<std::string, std::string> 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<FileUtils::FilePath> 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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -286,7 +286,7 @@ CNNNetworkImplPtr FormatParser::Parse(pugi::xml_node& root) {
|
||||
std::vector<CNNLayer::Ptr> inputLayers;
|
||||
int nodeCnt = 0;
|
||||
std::map<int, CNNLayer::Ptr> 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<uint8_t>::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);
|
||||
|
||||
@@ -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<std::string> {};
|
||||
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");
|
||||
|
||||
@@ -160,7 +160,7 @@ CustomLayer::CustomLayer(std::string configDir, const pugi::xml_node& customLaye
|
||||
assertOneOrMoreOccurrence(customLayer, {"Kernel"});
|
||||
auto kernelNodes = [&] {
|
||||
auto nodes = SmallVector<pugi::xml_node>{};
|
||||
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);
|
||||
|
||||
Reference in New Issue
Block a user