From 21503a162c2955636c2ef88ce365b5738ece75ea Mon Sep 17 00:00:00 2001 From: Andrea Zoli Date: Thu, 22 May 2014 17:19:10 +0200 Subject: [PATCH] Parse compression fields from xmls. --- src/XmlConfig.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/XmlConfig.cpp b/src/XmlConfig.cpp index 4043422..7b0f5ea 100644 --- a/src/XmlConfig.cpp +++ b/src/XmlConfig.cpp @@ -278,6 +278,9 @@ std::string XmlConfig::convert(const std::string& filename) hfs << nbits << endl; hfs << "[Field]" << endl; _writeFields(header, hfs); + // query for compression algorithm / compression level + xpath_node_set compression_algorithm = header.select_nodes("field[@id=\"packetlib:compression_algorithm\"]"); + xpath_node_set compression_level = header.select_nodes("field[@id=\"packetlib:compression_level\"]"); /// Write packet files vector packetFilenames; @@ -335,6 +338,43 @@ std::string XmlConfig::convert(const std::string& filename) xml_node tail = packet.child("tail"); _writeFields(tail, pfs); + // if not defined in the header find in datafieldheader + int algindex = 0; + if(compression_algorithm.empty()) + { + compression_algorithm = datafieldheader.select_nodes("field[@id=\"packetlib:compression_algorithm\"]"); + algindex = 1; + } + // and sourcedatafield + if(compression_algorithm.empty()) + { + algindex = 2; + compression_algorithm = sourcedatafield.select_nodes("@field[id=\"packetlib:compression_algorithm\"]"); + } + + // if not defined in the header find in datafieldheader + int lvlindex = 0; + if(compression_level.empty()) + { + compression_level = datafieldheader.select_nodes("field[@id=\"packetlib:compression_level\"]"); + lvlindex = 1; + } + // and sourcedatafield + if(compression_level.empty()) + { + lvlindex = 2; + compression_level = sourcedatafield.select_nodes("@field[id=\"packetlib:compression_level\"]"); + } + + if(!compression_algorithm.empty() && !compression_level.empty()) + { + pfs << "[Compression]" << endl; + pfs << _physicalIndex[compression_algorithm[0].node()] << endl; + pfs << algindex << endl; + pfs << _physicalIndex[compression_level[0].node()] << endl; + pfs << lvlindex << endl; + } + packet=packet.next_sibling(); } -- GitLab