using data::Patch_Ptr instead of a plain pointer in PrimaryFileReader
authorJan Kupec <jkupec@suse.cz>
Fri, 11 May 2007 12:52:19 +0000 (12:52 +0000)
committerJan Kupec <jkupec@suse.cz>
Fri, 11 May 2007 12:52:19 +0000 (12:52 +0000)
devel/devel.jkupec/YUMParser.cc
devel/devel.jkupec/YUMParser.h
zypp/parser/yum/PrimaryFileReader.cc
zypp/parser/yum/PrimaryFileReader.h

index ab4bf19..833c2b3 100644 (file)
@@ -48,12 +48,12 @@ namespace zypp
     return true;
   }
 
-  bool YUMParser::primary_CB(const zypp::data::Package & package)
+  bool YUMParser::primary_CB(const data::Package_Ptr & package_r)
   {
-    NVRA nvra(package.name, package.edition, package.arch);
+    NVRA nvra(package_r->name, package_r->edition, package_r->arch);
     data::RecordId pkgid =
       _consumer.appendResolvable(
-        _catalog_id, ResTraits<Package>::kind, nvra, package.deps);
+        _catalog_id, ResTraits<Package>::kind, nvra, package_r->deps);
 
 /*    MIL << "got package "
       << package.name << package.edition << " "
index 455a829..1ba55af 100644 (file)
@@ -60,7 +60,7 @@ namespace zypp
     void doJobs(const zypp::Pathname & path, ParserProgress::Ptr progress);
 
     bool repomd_CB(const OnMediaLocation & loc, const YUMResourceType & dtype);
-    bool primary_CB(const zypp::data::Package & package);
+    bool primary_CB(const data::Package_Ptr & package_r); 
     bool patches_CB(const OnMediaLocation &loc, const std::string & patch_id);
     bool patch_CB(const zypp::data::Patch & patch);
 
index 2819c70..a26c928 100644 (file)
@@ -32,7 +32,8 @@ namespace zypp
     :
       _callback(callback), _package(NULL),
       _count(0), _total_packages(0),
-      _tag(tag_NONE), _expect_rpm_entry(false), _dtype(zypp::Dep::REQUIRES),
+      _tag(tag_NONE), _expect_rpm_entry(false),
+      _dtype(zypp::Dep::REQUIRES),
       _progress(progress), _old_progress(0)
   {
     Reader reader( primary_file );
@@ -57,8 +58,7 @@ namespace zypp
       {
         _tag = tag_package;
   //      DBG << "got " << reader_r->getAttribute("type") << " package" << endl;
-        if (_package) delete _package;
-        _package = new zypp::data::Package();
+        _package = new data::Package;
 
         return true;
       }
@@ -81,6 +81,7 @@ namespace zypp
         _package->edition = Edition(reader_r->getAttribute("ver").asString(),
                                     reader_r->getAttribute("rel").asString(),
                                     reader_r->getAttribute("epoch").asString());
+        return true;
       }
 
       if (reader_r->name() == "checksum")
@@ -158,12 +159,9 @@ namespace zypp
     {
       if (reader_r->name() == "package")
       {
-        _callback(*_package);
-        if (_package)
-        {
-          delete _package;
-          _package = NULL;
-        }
+        if (_package && _callback)
+          _callback(handoutPackage());
+
         _count++;
 
         // report progress
@@ -341,6 +339,12 @@ namespace zypp
     return true;
   }
 
+  data::Package_Ptr PrimaryFileReader::handoutPackage()
+  {
+    data::Package_Ptr ret;
+    ret.swap(_package);
+    return ret;
+  }
 
     } // ns yum
   } // ns parser
index 663d2f8..f608f9d 100644 (file)
@@ -46,7 +46,7 @@ namespace zypp
     /**
      * Callback definition.
      */
-    typedef function<bool(const zypp::data::Package &)> ProcessPackage;
+    typedef function<bool(const data::Package_Ptr &)> ProcessPackage;
 
     /**
      * Enumeration of some primary.xml tags.
@@ -78,20 +78,22 @@ namespace zypp
      */
     bool consumeFormatChildNodes(zypp::xml::Reader & reader_r);
 
-  private:
-    /** Used to remember primary.xml tag beeing currently processed. */
-    Tag _tag;
+    /**
+     * Creates a new Package_Ptr swaps its contents with \ref _package and
+     * returns it.
+     */
+    data::Package_Ptr handoutPackage();
 
+  private:
     /**
-     * Used to remember whether we are expecting an rpm:entry tag
-     * e.g. for rpm:requires
+     * Callback for processing package metadata passed in through constructor.
      */
-    bool _expect_rpm_entry;
+    ProcessPackage _callback;
 
     /**
-     * Type of dependecy beeing processed.
+     * \ref zypp::data::Package object for storing the package metada
      */
-    Dep _dtype;
+    data::Package_Ptr _package;
 
     /**
      * Number of packages read so far.
@@ -104,22 +106,25 @@ namespace zypp
      */
     unsigned _total_packages;
 
+    /** Used to remember primary.xml tag beeing currently processed. */
+    Tag _tag;
+
     /**
-     * Pointer to the \ref zypp::data::Package object for storing the package
-     * metada
+     * Used to remember whether we are expecting an rpm:entry tag
+     * e.g. for rpm:requires
      */
-    zypp::data::Package *_package;
+    bool _expect_rpm_entry;
 
     /**
-     * Callback for processing package metadata passed in through constructor.
+     * Type of dependecy beeing processed.
      */
-    ProcessPackage _callback;
+    Dep _dtype;
 
     /**
      * Progress reporting object.
      */
     ParserProgress::Ptr _progress;
-    
+
     long int _old_progress;
   };