remove lot of duplicated code. The design of the format is not ideal but
authorDuncan Mac-Vicar P <dmacvicar@suse.de>
Fri, 17 Mar 2006 10:38:32 +0000 (10:38 +0000)
committerDuncan Mac-Vicar P <dmacvicar@suse.de>
Fri, 17 Mar 2006 10:38:32 +0000 (10:38 +0000)
is a bit late to change. So I prefer to iterate once per inheritance
level to find corresponding tags, slower, but not really noticiable.
Also remove warnings about unknowwn tags found because
3 different functions now parse the same dom looking
for different tags. The validation is done via relaxng anyway.

So now, only 1 function parsing dependencies, and 1 looking for
resolvable common data.

zypp/parser/xmlstore/XMLParserData.cc
zypp/parser/xmlstore/XMLParserData.h
zypp/parser/xmlstore/XMLPatchParser.cc
zypp/parser/xmlstore/XMLPatternParser.cc
zypp/parser/xmlstore/XMLProductParser.cc
zypp/parser/xmlstore/XMLResObjectParser.cc
zypp/parser/xmlstore/XMLResObjectParser.h
zypp/target/store/XMLFilesBackend.cc

index a4a1ddd..a7c84a5 100644 (file)
@@ -37,14 +37,6 @@ namespace zypp {
       { }
       */
       
-      IMPL_PTR_TYPE(XMLResObjectData);
-      IMPL_PTR_TYPE(XMLPatternData);
-      IMPL_PTR_TYPE(XMLProductData);
-      IMPL_PTR_TYPE(XMLPatchData);
-      //IMPL_PTR_TYPE(XMLPatchMessageData);
-      //IMPL_PTR_TYPE(XMLPatchPackageData);
-      //IMPL_PTR_TYPE(XMLPatchScriptData);
-      
       /* output operators */
 
       namespace {
@@ -145,6 +137,13 @@ namespace zypp {
         return out;
       }
 
+      IMPL_PTR_TYPE(XMLResObjectData);
+      IMPL_PTR_TYPE(XMLPatternData);
+      IMPL_PTR_TYPE(XMLProductData);
+      IMPL_PTR_TYPE(XMLPatchData);
+      IMPL_PTR_TYPE(XMLPatchMessageData);
+      IMPL_PTR_TYPE(XMLPatchScriptData);
+      
     } // namespace xml
   } // namespace parser
 } // namespace zypp
index bd092a4..0586b57 100644 (file)
@@ -26,6 +26,14 @@ namespace zypp {
   namespace parser {
     namespace xmlstore {
       
+      DEFINE_PTR_TYPE(XMLResObjectData);
+      DEFINE_PTR_TYPE(XMLProductData);
+      DEFINE_PTR_TYPE(XMLPatternData);
+      DEFINE_PTR_TYPE(XMLPatchData);
+      DEFINE_PTR_TYPE(XMLPatchAtomData);
+      DEFINE_PTR_TYPE(XMLPatchMessageData);
+      DEFINE_PTR_TYPE(XMLPatchScriptData);
+      
       /**
       * @short Holds dependency data
       */
@@ -65,11 +73,11 @@ namespace zypp {
       {
       public:
         XMLPatternData();
-        std::string name;
         TranslatedText summary;
+        TranslatedText description;
+        
         std::string default_;
         std::string userVisible;
-        TranslatedText description;
         TranslatedText category;
         std::string icon;
         std::string script;
@@ -83,7 +91,6 @@ namespace zypp {
 
         std::string type;
         std::string vendor;
-        std::string name; 
         TranslatedText displayname;
         TranslatedText description;
         // those are suse specific tags
@@ -112,17 +119,7 @@ namespace zypp {
           XMLPatchMessageData() {};
           virtual AtomType atomType() { return Message; };
           TranslatedText text;
-      };
-      
-      /*
-      class XMLPatchPackageData : public XMLPatchAtomData
-      {
-        public:
-          XMLPatchPackageData() {};
-          virtual AtomType atomType() { return Package; };
-          TranslatedText text;
-      };
-      */      
+      };     
       
       class XMLPatchData : public XMLResObjectData
       {
@@ -141,7 +138,7 @@ namespace zypp {
           bool rebootNeeded;
           bool packageManager;
           std::string updateScript;
-          std::list<shared_ptr<XMLPatchAtomData> > atoms;
+          std::list<XMLPatchAtomData_Ptr > atoms;
       };
 
             
@@ -150,14 +147,7 @@ namespace zypp {
       std::ostream& operator<<(std::ostream &out, const XMLPatternData& data);
       std::ostream& operator<<(std::ostream& out, const XMLProductData& data);
       
-      DEFINE_PTR_TYPE(XMLResObjectData);
-      DEFINE_PTR_TYPE(XMLProductData);
-      DEFINE_PTR_TYPE(XMLPatternData);
-      DEFINE_PTR_TYPE(XMLPatchData);
-      DEFINE_PTR_TYPE(XMLPatchAtomData);
-      DEFINE_PTR_TYPE(XMLPatchMessageData);
-      DEFINE_PTR_TYPE(XMLPatchScriptData);
-      DEFINE_PTR_TYPE(XMLPatchPackageData);
+      
     } // namespace xmlstore
   } // namespace parser
 } // namespace zypp
index 8831ff3..00ae620 100644 (file)
@@ -67,54 +67,21 @@ namespace zypp {
         patchPtr->rebootNeeded = false;
         patchPtr->packageManager = false;
       
+        parseResObjectCommonData( patchPtr, dataNode);
+        parseDependencies( patchPtr, dataNode);
+        
         for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next)
         {
-          if (_helper.isElement(child)) {
+          if (_helper.isElement(child))
+          {
             string name = _helper.name(child);
-            if (name == "name") {
-            patchPtr->name = _helper.content(child);
-            }
-            else if (name == "summary") {
+            
+            if (name == "summary") {
               patchPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
             }
             else if (name == "description") {
               patchPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
             }
-            else if (name == "version") {
-              patchPtr->epoch = _helper.attribute(child,"epoch");
-              patchPtr->ver = _helper.attribute(child,"ver");
-              patchPtr->rel = _helper.attribute(child,"rel");
-            }
-            else if (name == "provides") {
-              parseDependencyEntries(& patchPtr->provides, child);
-            }
-            else if (name == "conflicts") {
-              parseDependencyEntries(& patchPtr->conflicts, child);
-            }
-            else if (name == "obsoletes") {
-              parseDependencyEntries(& patchPtr->obsoletes, child);
-            }
-            else if (name == "prerequires") {
-              parseDependencyEntries(& patchPtr->prerequires, child);
-            }
-            else if (name == "requires") {
-              parseDependencyEntries(& patchPtr->requires, child);
-            }
-            else if (name == "recommends") {
-              parseDependencyEntries(& patchPtr->recommends, child);
-            }
-            else if (name == "suggests") {
-              parseDependencyEntries(& patchPtr->suggests, child);
-            }
-            else if (name == "supplements") {
-              parseDependencyEntries(& patchPtr->supplements, child);
-            }
-            else if (name == "enhances") {
-              parseDependencyEntries(& patchPtr->enhances, child);
-            }
-            else if (name == "freshens") {
-              parseDependencyEntries(& patchPtr->freshens, child);
-            }
             else if (name == "category") {
             patchPtr->category = _helper.content(child);
             }
@@ -130,10 +97,6 @@ namespace zypp {
             else if (name == "atoms") {
               parseAtomsNode(patchPtr, child);
             }
-            else {
-              WAR << "XML <data> contains the unknown element <" << name << "> "
-                << _helper.positionInfo(child) << ", skipping" << endl;
-            }
           }
         }
         return patchPtr;
@@ -162,10 +125,6 @@ namespace zypp {
             {
                 parseMessageNode (dataPtr, child);
             }
-            else {
-              WAR << "XML <atoms> contains the unknown element <" << name << "> "
-                << _helper.positionInfo(child) << ", skipping" << endl;
-            }
           }
         }
       } 
@@ -173,17 +132,21 @@ namespace zypp {
       void
       XMLPatchParser::parseAtomNode(XMLPatchData_Ptr dataPtr, xmlNodePtr formatNode)
       {
-        shared_ptr<XMLPatchAtomData> atom(new XMLPatchAtomData);
+        XMLPatchAtomData_Ptr atom(new XMLPatchAtomData);
         // inject dependencies and other stuff
-        parseResolvableNode( dataPtr, formatNode);        
+        parseResObjectCommonData( atom, formatNode);
+        parseDependencies( atom, formatNode);
+              
         dataPtr->atoms.push_back(atom);
       }
       
       void
       XMLPatchParser::parseScriptNode(XMLPatchData_Ptr dataPtr, xmlNodePtr formatNode)
       {
-        shared_ptr<XMLPatchScriptData> script(new XMLPatchScriptData);
-        parseResolvableNode( dataPtr, formatNode);
+        XMLPatchScriptData_Ptr script(new XMLPatchScriptData);
+        
+        parseResObjectCommonData( script, formatNode);
+        parseDependencies( script, formatNode);
         
         for (xmlNodePtr child = formatNode->children;  child != 0; child = child ->next)
         { 
@@ -197,10 +160,6 @@ namespace zypp {
             {
               script->undo_script = _helper.content(child);
             }
-            else
-            {
-              WAR << "XML <atoms/script> contains the unknown element <" << name << "> " << _helper.positionInfo(child) << ", skipping" << endl;
-            }
           }
         }
         dataPtr->atoms.push_back(script);
@@ -209,7 +168,10 @@ namespace zypp {
       void
       XMLPatchParser::parseMessageNode(XMLPatchData_Ptr dataPtr, xmlNodePtr formatNode)
       {
-        shared_ptr<XMLPatchMessageData> message(new XMLPatchMessageData);
+        XMLPatchMessageData_Ptr message(new XMLPatchMessageData);
+        
+        parseResObjectCommonData( message, formatNode);
+        parseDependencies( message, formatNode);
         
         for (xmlNodePtr child = formatNode->children;  child != 0; child = child ->next)
         {
@@ -219,70 +181,11 @@ namespace zypp {
             if (name == "text") {
               message->text.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
             }
-            else {
-              WAR << "XML <atoms/message> contains the unknown element <" << name << "> " << _helper.positionInfo(child) << ", skipping" << endl;
-            }
           }
         }        
-        parseResolvableNode( dataPtr, formatNode);
         dataPtr->atoms.push_back(message);
       }
 
-      void XMLPatchParser::parseResolvableNode(XMLResObjectData_Ptr dataPtr, xmlNodePtr formatNode)
-      {
-        for (xmlNodePtr child = formatNode->children; child != 0; child = child ->next)
-        {
-          if (_helper.isElement(child))
-          {
-            string name = _helper.name(child);
-            if (name == "name") {
-              dataPtr->name = _helper.content(child);
-            }
-            else if (name == "version") {
-              dataPtr->epoch = _helper.attribute(child,"epoch");
-              dataPtr->ver = _helper.attribute(child,"ver");
-              dataPtr->rel = _helper.attribute(child,"rel");
-            }
-            else if (name == "arch") {
-              dataPtr->arch = _helper.content(child);
-            }
-            else if (name == "provides") {
-              parseDependencyEntries(& dataPtr->provides, child);
-            }
-            else if (name == "conflicts") {
-              parseDependencyEntries(& dataPtr->conflicts, child);
-            }
-            else if (name == "obsoletes") {
-              parseDependencyEntries(& dataPtr->obsoletes, child);
-            }
-            else if (name == "requires") {
-              parseDependencyEntries(& dataPtr->requires, child);
-            }
-            else if (name == "recommends") {
-              parseDependencyEntries(& dataPtr->recommends, child);
-            }
-            else if (name == "suggests") {
-              parseDependencyEntries(& dataPtr->suggests, child);
-            }
-            else if (name == "supplements") {
-              parseDependencyEntries(& dataPtr->supplements, child);
-            }
-            else if (name == "enhances") {
-              parseDependencyEntries(& dataPtr->enhances, child);
-            }
-            else if (name == "freshens") {
-              parseDependencyEntries(& dataPtr->freshens, child);
-            }
-            else {
-              WAR << "XML <atoms/" << _helper.name(formatNode) << "> contains the unknown element <"
-                  << name << "> "
-                  << _helper.positionInfo(child) << ", skipping" << endl;
-            }
-          }
-        }
-      }
-
-      
     } // namespace yum
   } // namespace parser
 } // namespace zypp
index 71a77cf..88be596 100644 (file)
@@ -55,79 +55,39 @@ namespace zypp {
         xmlNodePtr dataNode = xmlTextReaderExpand(reader);
         xml_assert(dataNode);
         
-        for (xmlNodePtr child = dataNode->children;
-             child && child != dataNode;
-             child = child->next) {
-               if (_helper.isElement(child)) {
-                 string name = _helper.name(child);
-                 if (name == "name") {
-                   dataPtr->name = _helper.content(child);
-                 }
-                 else if (name == "arch") {
-                   dataPtr->arch = _helper.content(child);
-                 }
-                 else if (name == "version") {
-                   dataPtr->epoch = _helper.attribute(child,"epoch");
-                   dataPtr->ver = _helper.attribute(child,"ver");
-                   dataPtr->rel = _helper.attribute(child,"rel");
-                 }
-                 else if (name == "summary") {
-                   dataPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
-                 }
-                 else if (name == "default") {
-                   dataPtr->default_ = _helper.content(child);
-                 }
-                 else if (name == "uservisible") {
-                   dataPtr->userVisible = _helper.content(child);
-                 }
-                 else if (name == "description") {
-                   dataPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
-                 }
-                else if (name == "category") {
-                  dataPtr->category.setText(_helper.content(child));
-                }
-                else if (name == "icon") {
-                  dataPtr->icon = _helper.content(child);
-                }
-                else if (name == "script") {
-                  dataPtr->script = _helper.content(child);
-                }
-                 else if (name == "provides") {
-                  parseDependencyEntries(& dataPtr->provides, child);
-                }
-                else if (name == "conflicts") {
-                  parseDependencyEntries(& dataPtr->conflicts, child);
-                }
-                else if (name == "obsoletes") {
-                  parseDependencyEntries(& dataPtr->obsoletes, child);
-                }
-                 else if (name == "prerequires") {
-                   parseDependencyEntries(& dataPtr->prerequires, child);
-                 }
-                else if (name == "requires") {
-                  parseDependencyEntries(& dataPtr->requires, child);
-                }
-                else if (name == "recommends") {
-                  parseDependencyEntries(& dataPtr->recommends, child);
-                }
-                else if (name == "suggests") {
-                  parseDependencyEntries(& dataPtr->suggests, child);
-                }
-                else if (name == "supplements") {
-                  parseDependencyEntries(& dataPtr->supplements, child);
-                }
-                else if (name == "enhances") {
-                  parseDependencyEntries(& dataPtr->enhances, child);
-                }
-                else if (name == "freshens") {
-                  parseDependencyEntries(& dataPtr->freshens, child);
-                }
-                 else {
-                   WAR << "XML <pattern> contains the unknown element <" << name << "> "
-                     << _helper.positionInfo(child) << ", skipping" << endl;
-                 }
-               }
-             }
+        parseResObjectCommonData( dataPtr, dataNode);
+        parseDependencies( dataPtr, dataNode);
+        
+        for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next)
+        {
+          if (_helper.isElement(child))
+          {
+            string name = _helper.name(child);
+            
+            if (name == "summary")
+            {
+              dataPtr->summary.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
+            }
+            else if (name == "default") {
+              dataPtr->default_ = _helper.content(child);
+            }
+            else if (name == "uservisible") {
+              dataPtr->userVisible = _helper.content(child);
+            }
+            else if (name == "description") {
+              dataPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
+            }
+            else if (name == "category") {
+              dataPtr->category.setText(_helper.content(child));
+            }
+            else if (name == "icon") {
+              dataPtr->icon = _helper.content(child);
+            }
+            else if (name == "script") {
+              dataPtr->script = _helper.content(child);
+            }
+          }
+        }
         return dataPtr;
       } /* end process */
       
index fa76ce4..1915cbe 100644 (file)
@@ -59,16 +59,16 @@ namespace zypp {
         xmlNodePtr dataNode = xmlTextReaderExpand(reader);
         xml_assert(dataNode);
         productPtr->type = _helper.attribute(dataNode,"type");
-      
+              
+        parseResObjectCommonData( productPtr, dataNode);
+        parseDependencies( productPtr, dataNode);
+        
         for (xmlNodePtr child = dataNode->children; child && child != dataNode; child = child->next)
         {
           if (_helper.isElement(child))
           {
             string name = _helper.name(child);
-            if (name == "name") {
-             productPtr->name = _helper.content(child);
-            }
-            else if (name == "vendor") {
+            if (name == "vendor") {
              productPtr->vendor = _helper.content(child);
             }
             else if (name == "release-notes-url") {
@@ -80,45 +80,6 @@ namespace zypp {
             else if (name == "description") {
               productPtr->description.setText(_helper.content(child), Locale(_helper.attribute(child,"lang")));
             }
-            else if (name == "version") {
-              productPtr->epoch = _helper.attribute(child,"epoch");
-              productPtr->ver = _helper.attribute(child,"ver");
-              productPtr->rel = _helper.attribute(child,"rel");
-            }
-            else if (name == "provides") {
-              parseDependencyEntries(& productPtr->provides, child);
-            }
-            else if (name == "conflicts") {
-              parseDependencyEntries(& productPtr->conflicts, child);
-            }
-            else if (name == "obsoletes") {
-              parseDependencyEntries(& productPtr->obsoletes, child);
-            }
-            else if (name == "prerequires") {
-              parseDependencyEntries(& productPtr->prerequires, child);
-            }
-            else if (name == "requires") {
-              parseDependencyEntries(& productPtr->requires, child);
-            }
-            else if (name == "recommends") {
-              parseDependencyEntries(& productPtr->recommends, child);
-            }
-            else if (name == "suggests") {
-              parseDependencyEntries(& productPtr->suggests, child);
-            }
-            else if (name == "supplements") {
-              parseDependencyEntries(& productPtr->supplements, child);
-            }
-            else if (name == "enhances") {
-              parseDependencyEntries(& productPtr->enhances, child);
-            }
-            else if (name == "freshens") {
-              parseDependencyEntries(& productPtr->freshens, child);
-            }
-            else {
-              WAR << "XML <data> contains the unknown element <" << name << "> "
-                << _helper.positionInfo(child) << ", skipping" << endl;
-            }
           }
         }
         return productPtr;
index ed2d2bf..1f52099 100644 (file)
@@ -37,11 +37,75 @@ XMLResObjectParser::~XMLResObjectParser()
 {
 }
 
-void parseResObjectEntries( XMLResObjectData *data,  xmlNodePtr depNode)
+
+void
+XMLResObjectParser::parseResObjectCommonData( XMLResObjectData_Ptr dataPtr, xmlNodePtr node)
 {
-  xml_assert(data);
-  xml_assert(depNode); 
-  
+  xml_assert(node);
+
+  for (xmlNodePtr child = node->children; child != 0; child = child ->next)
+  {
+    if (_helper.isElement(child))
+    {
+      string name = _helper.name(child);
+
+      if (name == "name") {
+        dataPtr->name = _helper.content(child);
+      }
+      else if (name == "arch") {
+        dataPtr->arch = _helper.content(child);
+      }
+      else if (name == "version") {
+        dataPtr->epoch = _helper.attribute(child,"epoch");
+        dataPtr->ver = _helper.attribute(child,"ver");
+        dataPtr->rel = _helper.attribute(child,"rel");
+      }
+    }
+  }
+} 
+
+void
+    XMLResObjectParser::parseDependencies( XMLResObjectData_Ptr dataPtr, xmlNodePtr node)
+{
+  xml_assert(node);
+
+  for (xmlNodePtr child = node->children; child != 0; child = child ->next)
+  {
+    if (_helper.isElement(child))
+    {
+      string name = _helper.name(child);
+      if (name == "provides") {
+        parseDependencyEntries(& dataPtr->provides, child);
+      }
+      else if (name == "conflicts") {
+        parseDependencyEntries(& dataPtr->conflicts, child);
+      }
+      else if (name == "obsoletes") {
+        parseDependencyEntries(& dataPtr->obsoletes, child);
+      }
+      else if (name == "prerequires") {
+        parseDependencyEntries(& dataPtr->prerequires, child);
+      }
+      else if (name == "requires") {
+        parseDependencyEntries(& dataPtr->requires, child);
+      }
+      else if (name == "recommends") {
+        parseDependencyEntries(& dataPtr->recommends, child);
+      }
+      else if (name == "suggests") {
+        parseDependencyEntries(& dataPtr->suggests, child);
+      }
+      else if (name == "supplements") {
+        parseDependencyEntries(& dataPtr->supplements, child);
+      }
+      else if (name == "enhances") {
+        parseDependencyEntries(& dataPtr->enhances, child);
+      }
+      else if (name == "freshens") {
+        parseDependencyEntries(& dataPtr->freshens, child);
+      }
+    }
+  } 
   
 }
 
@@ -49,7 +113,6 @@ void
 XMLResObjectParser::parseDependencyEntries(list<XMLDependency> *depList,
                                               xmlNodePtr depNode)
 {
-  xml_assert(depList);
   xml_assert(depNode);
 
   for (xmlNodePtr child = depNode->children; child != 0; child = child ->next)
@@ -66,7 +129,7 @@ XMLResObjectParser::parseDependencyEntries(list<XMLDependency> *depList,
       }
       else
       {
-        WAR << "XML dependency within <format> contains the unknown element <" << name << "> "
+        WAR << "XML dependency contains the unknown element <" << name << "> "
           << _helper.positionInfo(child) << ", skipping" << endl;
       }
     }
index e458e1e..5022379 100644 (file)
@@ -6,7 +6,7 @@
 |                         /_____||_| |_| |_|                           |
 |                                                                      |
 \---------------------------------------------------------------------*/
-/** \file zypp/parser/yum/XMLResObjectParser.h
+/** \file zypp/parser/xmlstore/XMLResObjectParser.h
  *
 */
 
@@ -31,10 +31,8 @@ namespace zypp {
         virtual ~XMLResObjectParser();
     
       protected:
-        // FIXME move needed method to a common class, inherit it
-        friend class XMLProductParser;
-//        friend class XMLPatternParser;
-        //void parseResObjectEntries( XMLResObjectData *data,  xmlNodePtr depNode); 
+        void parseResObjectCommonData( XMLResObjectData_Ptr dataPtr, xmlNodePtr node);
+        void parseDependencies( XMLResObjectData_Ptr dataPtr, xmlNodePtr depNode);
         void parseDependencyEntries(std::list<XMLDependency> *depList,  xmlNodePtr depNode);    
         LibXMLHelper _helper;
       };
index 3f5b192..49c0fd1 100644 (file)
@@ -664,7 +664,7 @@ XMLFilesBackend::createPatch( const zypp::parser::xmlstore::XMLPatchData & parse
     
     // now process the atoms
     ResObject::Ptr atom;
-    for (std::list<shared_ptr<XMLPatchAtomData> >::const_iterator it = parsed.atoms.begin(); it != parsed.atoms.end(); it++)
+    for (std::list<XMLPatchAtomData_Ptr >::const_iterator it = parsed.atoms.begin(); it != parsed.atoms.end(); it++)
     {
       switch ((*it)->atomType())
       {
@@ -677,21 +677,21 @@ XMLFilesBackend::createPatch( const zypp::parser::xmlstore::XMLPatchData & parse
           // the patch require the atom, the atom require and freshens the package.
           
           // get the parsed patch atom data
-          shared_ptr<XMLPatchAtomData> atom_data = dynamic_pointer_cast<XMLPatchAtomData>(*it);
+          XMLPatchAtomData_Ptr atom_data = dynamic_pointer_cast<XMLPatchAtomData>(*it);
           atom = createAtom(*atom_data);
           impl->_atoms.push_back(atom);
           break;
         }
         case XMLPatchAtomData::Message:
         {
-          shared_ptr<XMLPatchMessageData> message_data = dynamic_pointer_cast<XMLPatchMessageData>(*it);
+          XMLPatchMessageData_Ptr message_data = dynamic_pointer_cast<XMLPatchMessageData>(*it);
           atom = createMessage(*message_data);
           impl->_atoms.push_back(atom);
           break;
         }
         case XMLPatchAtomData::Script:
         {
-          shared_ptr<XMLPatchScriptData> script_data = dynamic_pointer_cast<XMLPatchScriptData>(*it);
+          XMLPatchScriptData_Ptr script_data = dynamic_pointer_cast<XMLPatchScriptData>(*it);
           atom = createScript(*script_data);
           impl->_atoms.push_back(atom);
           break;