Browse Source

Improved XMLReader class

- reduced complexity of node merge process
Patrick 4 years ago
parent
commit
4acd78a897
2 changed files with 17 additions and 13 deletions
  1. 15 12
      source/io/xml/XMLReader.cpp
  2. 2 1
      source/io/xml/XMLReader.hpp

+ 15 - 12
source/io/xml/XMLReader.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-10-10
  * Created:         2020-10-10
- * Changed:         2020-10-19
+ * Changed:         2020-10-22
  *
  *
  * */
  * */
 
 
@@ -189,24 +189,27 @@ void ls_std::XMLReader::_mergeNodes()
   this->document->setRootElement(this->parseData.front().node);
   this->document->setRootElement(this->parseData.front().node);
 }
 }
 
 
+void ls_std::XMLReader::_mergeChildrenToParentNode(const std::shared_ptr<ls_std::XMLNode>& _parent, std::list<ls_std::XMLParseData>::iterator& _iterator)
+{
+  do {
+    _iterator++;
+
+    if(_iterator != this->parseData.end() && _iterator->level == this->maxLevel) {
+      _parent->addChildToEnd(_iterator->node);
+    }
+  }
+  while(_iterator->level == this->maxLevel);
+}
+
 void ls_std::XMLReader::_mergeNodesOnCurrentLevel() {
 void ls_std::XMLReader::_mergeNodesOnCurrentLevel() {
   auto iterator = this->parseData.begin();
   auto iterator = this->parseData.begin();
-  uint8_t parentLevel {};
+  uint8_t parentLevel;
 
 
   while(iterator != this->parseData.end()) {
   while(iterator != this->parseData.end()) {
     parentLevel = this->maxLevel - 1;
     parentLevel = this->maxLevel - 1;
 
 
     if(iterator->level == parentLevel) {
     if(iterator->level == parentLevel) {
-      std::shared_ptr<ls_std::XMLNode> parent = iterator->node;
-
-      do {
-        iterator++;
-
-        if(iterator != this->parseData.end() && iterator->level == this->maxLevel) {
-          parent->addChildToEnd(iterator->node);
-        }
-      }
-      while(iterator->level == this->maxLevel);
+      this->_mergeChildrenToParentNode(iterator->node, iterator);
     }
     }
     else {
     else {
       iterator++;
       iterator++;

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

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-10-08
  * Created:         2020-10-08
- * Changed:         2020-10-19
+ * Changed:         2020-10-22
  *
  *
  * */
  * */
 
 
@@ -60,6 +60,7 @@ namespace ls_std {
       void _isDeclaration(const ls_std::byte_field& _data, std::string::size_type _index);
       void _isDeclaration(const ls_std::byte_field& _data, std::string::size_type _index);
       void _isOpeningTag(const ls_std::byte_field& _data, std::string::size_type _index);
       void _isOpeningTag(const ls_std::byte_field& _data, std::string::size_type _index);
       void _mergeNodes();
       void _mergeNodes();
+      void _mergeChildrenToParentNode(const std::shared_ptr<ls_std::XMLNode>& _parent, std::list<ls_std::XMLParseData>::iterator& _iterator);
       void _mergeNodesOnCurrentLevel();
       void _mergeNodesOnCurrentLevel();
       void _parse(const ls_std::byte_field& _data);
       void _parse(const ls_std::byte_field& _data);
       static std::pair<std::string, std::string> _parseAttribute(const ls_std::byte_field& _data);
       static std::pair<std::string, std::string> _parseAttribute(const ls_std::byte_field& _data);