enabled cmp functions in solver queue
authorStefan Schubert <schubi@suse.de>
Tue, 15 Apr 2008 12:38:13 +0000 (12:38 +0000)
committerStefan Schubert <schubi@suse.de>
Tue, 15 Apr 2008 12:38:13 +0000 (12:38 +0000)
zypp/solver/detail/SolverQueueItem.h
zypp/solver/detail/SolverQueueItemDelete.cc
zypp/solver/detail/SolverQueueItemDelete.h
zypp/solver/detail/SolverQueueItemInstall.cc
zypp/solver/detail/SolverQueueItemInstall.h
zypp/solver/detail/SolverQueueItemInstallOneOf.cc
zypp/solver/detail/SolverQueueItemInstallOneOf.h
zypp/solver/detail/SolverQueueItemUpdate.cc
zypp/solver/detail/SolverQueueItemUpdate.h

index 30b463f..49e87ba 100644 (file)
@@ -96,7 +96,7 @@ class SolverQueueItem : public base::ReferenceCounted, private base::NonCopyable
 
 
     virtual SolverQueueItem_Ptr copy (void) const = 0;
-    //virtual int cmp (SolverQueueItem_constPtr item) const = 0;
+    virtual int cmp (SolverQueueItem_constPtr item) const = 0;
     int compare (SolverQueueItem_constPtr item) const { return CMP(_type, item->_type); }
 
 
index 1f5c5eb..dbc7297 100644 (file)
@@ -72,6 +72,26 @@ SolverQueueItemDelete::copy (void) const
     return new_delete;
 }
 
+int
+SolverQueueItemDelete::cmp (SolverQueueItem_constPtr item) const
+{
+    int cmp = this->compare (item);
+    if (cmp != 0)
+        return cmp;
+    SolverQueueItemDelete_constPtr del = dynamic_pointer_cast<const SolverQueueItemDelete>(item);
+    if (_name != del->_name) {
+       return _name.compare(del->_name);
+    } else {
+       if (_soft == del->_soft) {
+           return 0;
+       } else {
+           if (_soft)
+               return 1;
+           else
+               return -1;
+       }
+    }
+}
 
 //---------------------------------------------------------------------------
 
index 29adeb8..a0c5031 100644 (file)
@@ -68,7 +68,7 @@ class SolverQueueItemDelete : public SolverQueueItem {
     // ---------------------------------- methods
 
     virtual SolverQueueItem_Ptr copy (void) const;
-    //virtual int cmp (SolverQueueItem_constPtr item) const;
+    virtual int cmp (SolverQueueItem_constPtr item) const;
 };
 
 ///////////////////////////////////////////////////////////////////
index a129def..808b1ed 100644 (file)
@@ -73,6 +73,28 @@ SolverQueueItemInstall::copy (void) const
 }
 
 
+int
+SolverQueueItemInstall::cmp (SolverQueueItem_constPtr item) const
+{
+    int cmp = this->compare (item);
+    if (cmp != 0)
+        return cmp;
+    SolverQueueItemInstall_constPtr ins = dynamic_pointer_cast<const SolverQueueItemInstall>(item);
+    if (_name != ins->_name) {
+       return _name.compare(ins->_name);
+    } else {
+       if (_soft == ins->_soft) {
+           return 0;
+       } else {
+           if (_soft)
+               return 1;
+           else
+               return -1;
+       }
+    }
+}
+
+
 //---------------------------------------------------------------------------
 
 
index 06220ba..b1047df 100644 (file)
@@ -67,7 +67,7 @@ class SolverQueueItemInstall : public SolverQueueItem {
     // ---------------------------------- methods
 
     virtual SolverQueueItem_Ptr copy (void) const;
-    //virtual int cmp (SolverQueueItem_constPtr item) const;
+    virtual int cmp (SolverQueueItem_constPtr item) const;
 };
 
 ///////////////////////////////////////////////////////////////////
index df29fb1..7a0cca1 100644 (file)
@@ -75,6 +75,17 @@ SolverQueueItemInstallOneOf::copy (void) const
     return new_installOneOf;
 }
 
+int
+SolverQueueItemInstallOneOf::cmp (SolverQueueItem_constPtr item) const
+{
+    int cmp = this->compare (item);
+    if (cmp != 0)
+        return cmp;
+    SolverQueueItemInstallOneOf_constPtr install = dynamic_pointer_cast<const SolverQueueItemInstallOneOf>(item);
+
+    return (_oneOfList == install->_oneOfList) ? 0 : -1; // more evaluation would be not useful
+}
+
 
 //---------------------------------------------------------------------------
 
index 5a8f274..a0846f1 100644 (file)
@@ -69,7 +69,7 @@ class SolverQueueItemInstallOneOf : public SolverQueueItem {
     // ---------------------------------- methods
 
     virtual SolverQueueItem_Ptr copy (void) const;
-    //virtual int cmp (SolverQueueItem_constPtr item) const;
+    virtual int cmp (SolverQueueItem_constPtr item) const;
 };
 
 ///////////////////////////////////////////////////////////////////
index 5656e74..8a58c5b 100644 (file)
@@ -73,6 +73,16 @@ SolverQueueItemUpdate::copy (void) const
     return new_update;
 }
 
+int
+SolverQueueItemUpdate::cmp (SolverQueueItem_constPtr item) const
+{
+    int cmp = this->compare (item);
+    if (cmp != 0)
+        return cmp;
+    SolverQueueItemUpdate_constPtr update = dynamic_pointer_cast<const SolverQueueItemUpdate>(item);
+    return compareByNVRA (_item.resolvable(), update->_item.resolvable());
+}
+
 
 //---------------------------------------------------------------------------
 
index c307b7e..4839f96 100644 (file)
@@ -67,7 +67,7 @@ class SolverQueueItemUpdate : public SolverQueueItem {
     // ---------------------------------- methods
 
     virtual SolverQueueItem_Ptr copy (void) const;
-    //virtual int cmp (SolverQueueItem_constPtr item) const;
+    virtual int cmp (SolverQueueItem_constPtr item) const;
 };
 
 ///////////////////////////////////////////////////////////////////