[Aptitude-devel] r3149 - in branches/aptitude-0.3/aptitude: . src/generic/problemresolver

Daniel Burrows dburrows@costa.debian.org
Wed, 27 Apr 2005 15:05:03 +0000


Author: dburrows
Date: Wed Apr 27 15:04:59 2005
New Revision: 3149

Modified:
   branches/aptitude-0.3/aptitude/ChangeLog
   branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
Log:
Accumulate the new score incrementally, break out if it's too bad.

Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog	(original)
+++ branches/aptitude-0.3/aptitude/ChangeLog	Wed Apr 27 15:04:59 2005
@@ -1,5 +1,10 @@
 2005-04-27  Daniel Burrows  <dburrows@debian.org>
 
+	* src/generic/problemresolver/problemresolver.h:
+
+	  Incrementally calculate the new score, and abort as soon as it
+	  drops below minimum_score.
+
 	* src/generic/aptitude_resolver.h, src/generic/problemresolver/problemresolver.h:
 
 	  Add a 'broken_under' method to the aptitude_resolver_dep class,

Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	(original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h	Wed Apr 27 15:04:59 2005
@@ -568,23 +568,36 @@
     // *either* the reverse list of v *or* the reverse list of
     // old_version.
 
+    int new_score=new_action_score;
+
     for(typename version::revdep_iterator rd=old_version.revdeps_begin();
-	!rd.end(); ++rd)
+	!rd.end() && (broken_score>0 || new_score>=minimum_score);
+	++rd)
       if((*rd).broken_under(S))
-	new_broken.insert(*rd);
+	{
+	  new_broken.insert(*rd);
+	  new_score+=broken_score;
+	}
 
     for(typename version::revdep_iterator rd=v.revdeps_begin();
-	!rd.end(); ++rd)
+	!rd.end() && (broken_score>0 || new_score>=minimum_score);
+	++rd)
       if((*rd).broken_under(S))
-	new_broken.insert(*rd);
+	{
+	  new_broken.insert(*rd);
+	  new_score+=broken_score;
+	}
 
     const std::set<dep> &old_broken=s.get_broken();
     for(typename std::set<dep>::const_iterator bd=old_broken.begin();
-	bd!=old_broken.end(); ++bd)
+	bd!=old_broken.end() && (broken_score>0 || new_score>=minimum_score);
+	++bd)
       if((*bd).broken_under(S))
-	new_broken.insert(*bd);
+	{
+	  new_broken.insert(*bd);
+	  new_score+=broken_score;
+	}
 
-    int new_score=new_action_score+broken_score*new_broken.size();
     if(new_broken.size() == 0)
       new_score+=full_solution_score;