[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;