Bläddra i källkod

Extended XMLReader class

- added max level calculation for later node merge process
pcmattulat 4 år sedan
förälder
incheckning
0f459ed856
2 ändrade filer med 11 tillägg och 0 borttagningar
  1. 9 0
      source/io/xml/XMLReader.cpp
  2. 2 0
      source/io/xml/XMLReader.hpp

+ 9 - 0
source/io/xml/XMLReader.cpp

@@ -247,6 +247,7 @@ size_t ls_std::XMLReader::_parseOpeningTag(const ls_std::byte_field &_data, std:
 
     if(!tagString.endsWith("/>")) {
       this->currentLevel += 1;
+      this->_setMaxLevel();
     }
   }
 
@@ -297,6 +298,14 @@ void ls_std::XMLReader::_read(const ls_std::byte_field &_data)
 void ls_std::XMLReader::_reset()
 {
   this->currentLevel = 1;
+  this->maxLevel = 1;
   this->mode = XML_PARSE_MODE_ANALYZE;
   this->parseData.clear();
 }
+
+void ls_std::XMLReader::_setMaxLevel()
+{
+  if(this->currentLevel > this->maxLevel) {
+    this->maxLevel = this->currentLevel;
+  }
+}

+ 2 - 0
source/io/xml/XMLReader.hpp

@@ -43,6 +43,7 @@ namespace ls_std {
 
       uint8_t currentLevel {};
       std::shared_ptr<ls_std::XMLDocument> document {};
+      uint8_t maxLevel {};
       ls_std::XMLParseMode mode {};
       std::list<ls_std::XMLParseData> parseData {};
       ls_std::File xmlFile;
@@ -66,6 +67,7 @@ namespace ls_std {
       static ls_std::byte_field _parseTagName(const ls_std::byte_field& _data);
       void _read(const ls_std::byte_field& _data);
       void _reset();
+      void _setMaxLevel();
   };
 }