[Aptitude-devel] r2957 - in branches/aptitude-0.3/aptitude: . src/generic/problemresolver
Daniel Burrows
dburrows@costa.debian.org
Sat, 09 Apr 2005 14:28:29 +0000
Author: dburrows
Date: Sat Apr 9 14:28:26 2005
New Revision: 2957
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/generic/problemresolver/problemresolver.h
branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
Log:
Adjust the core problem resolution code to make apt universes simpler to implement.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Sat Apr 9 14:28:26 2005
@@ -1,3 +1,12 @@
+2005-04-09 Daniel Burrows <dburrows@debian.org>
+
+ * src/generic/problemresolver/problemresolver.h, src/generic/problemresolver/test.cc:
+
+ Make changes necessary to support apt universes in a simple way.
+ In particular, the exported iterators now support end() methods
+ and their containers only provide a _begin() method (this allows
+ the iterators to be built on standard APT iterators).
+
2005-04-08 Daniel Burrows <dburrows@debian.org>
* src/generic/problemresolver/problemresolver.h:
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 Sat Apr 9 14:28:26 2005
@@ -508,7 +508,7 @@
// mitigate that by offering higher-level "imagine this situation;
// is this dep broken?" operations in the universe.
for(typename dep::solver_iterator i=d.solvers_begin();
- i!=d.solvers_end(); ++i)
+ !i.end(); ++i)
{
if(ver_installed(s, v, *i))
return false;
@@ -548,12 +548,12 @@
// anyway. Just plowing ahead for now.
for(typename version::revdep_iterator rd=old_version.revdeps_begin();
- rd!=old_version.revdeps_end(); ++rd)
+ !rd.end(); ++rd)
if(dep_broken(s, v, *rd))
new_broken.insert(*rd);
for(typename version::revdep_iterator rd=v.revdeps_begin();
- rd!=v.revdeps_end(); ++rd)
+ !rd.end(); ++rd)
if(dep_broken(s, v, *rd))
new_broken.insert(*rd);
@@ -601,7 +601,7 @@
if(source_version == source_package.current_version())
{
for(typename package::version_iterator vi=source_package.versions_begin();
- vi!=source_package.versions_end(); ++vi)
+ !vi.end(); ++vi)
if(*vi != source_version)
{
std::cout << " Trying to resolve " << d << " by installing " << (*vi).get_package().get_name() << " version " << (*vi).get_name() << std::endl;
@@ -614,7 +614,7 @@
else
{
for(typename dep::solver_iterator si=d.solvers_begin();
- si!=d.solvers_end(); ++si)
+ !si.end(); ++si)
{
std::cout << " Trying to resolve " << d << " by installing " << (*si).get_package().get_name() << " version " << (*si).get_name() << std::endl;
try_install(s, *si);
@@ -711,7 +711,7 @@
// Find all the broken deps.
for(typename PackageUniverse::broken_dep_iterator bi=universe.broken_begin();
- bi!=universe.broken_end(); ++bi)
+ !bi.end(); ++bi)
broken.insert(*bi);
open.push(solution(broken, broken.size()*broken_score));
@@ -762,12 +762,12 @@
{
out << "{" << std::endl;
for(typename PackageUniverse::package_iterator i=universe.packages_begin();
- i!=universe.packages_end(); ++i)
+ !i.end(); ++i)
{
bool any_modified=false;
for(typename PackageUniverse::package::version_iterator j=(*i).versions_begin();
- j!=(*i).versions_end(); ++j)
+ !j.end(); ++j)
if(version_scores[(*j).get_id()]!=0)
any_modified=true;
@@ -776,7 +776,7 @@
out << " SCORE " << (*i).get_name() << " <";
for(typename PackageUniverse::package::version_iterator j=(*i).versions_begin();
- j!=(*i).versions_end(); ++j)
+ !j.end(); ++j)
if(version_scores[(*j).get_id()]!=0)
out << " " << (*j).get_name();
@@ -792,17 +792,17 @@
{
out << "UNIVERSE ";
for(typename PackageUniverse::package_iterator p=world.packages_begin();
- p!=world.packages_end(); ++p)
+ !p.end(); ++p)
{
out << "PACKAGE " << (*p).get_name() << " < ";
for(typename PackageUniverse::package::version_iterator v=(*p).versions_begin();
- v!=(*p).versions_end(); ++v)
+ !v.end(); ++v)
out << (*v).get_name() << " ";
out << ">" << " " << (*p).current_version().get_name() << endl;
}
for(typename PackageUniverse::dep_iterator d=world.deps_begin();
- d!=world.deps_end(); ++d)
+ !d.end(); ++d)
{
const typename PackageUniverse::version &sv=(*d).get_source();
const typename PackageUniverse::package &sp=sv.get_package();
@@ -810,7 +810,7 @@
out << "DEP " << sp.get_name() << " " << sv.get_name() << " < ";
for(typename PackageUniverse::dep::solver_iterator t=(*d).solvers_begin();
- t!=(*d).solvers_end(); ++t)
+ !t.end(); ++t)
{
out << " " << (*t).get_package().get_name() << " " << (*t).get_name() << " ";
}
Modified: branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc (original)
+++ branches/aptitude-0.3/aptitude/src/generic/problemresolver/test.cc Sat Apr 9 14:28:26 2005
@@ -54,10 +54,16 @@
template<class T1, class T2>
class wrap_ptr_iter
{
- typename vector<T1 *>::const_iterator realiter;
+ typename vector<T1 *>::const_iterator realiter, realend;
public:
- wrap_ptr_iter(const typename vector<T1 *>::const_iterator &_realiter)
- :realiter(_realiter)
+ wrap_ptr_iter(const vector<T1 *> &parent)
+ :realiter(parent.begin()), realend(parent.end())
+ {
+ }
+
+ wrap_ptr_iter(const typename vector<T1 *>::const_iterator &begin,
+ const typename vector<T1 *>::const_iterator &end)
+ :realiter(begin), realend(end)
{
}
@@ -71,6 +77,11 @@
return realiter!=other.realiter;
}
+ bool end() const
+ {
+ return realiter == realend;
+ }
+
wrap_ptr_iter &operator++()
{
++realiter;
@@ -222,7 +233,7 @@
dummy_version *dummy_package::version_from_name(const string &the_name) const
{
- for(vector<dummy_version *>::const_iterator i=versions.begin(); i!=versions.end(); ++i)
+ for(version_iterator i=versions.begin(); i!=versions.end(); ++i)
if((*i)->get_name()==the_name)
return *i;
@@ -286,7 +297,8 @@
if(source->get_package().current_version() != *source)
return false;
- for(solver_iterator i=solvers_begin(); i!=solvers_end(); ++i)
+ for(solver_iterator i=target_set.begin();
+ i!=target_set.end(); ++i)
if((*i)->get_package().current_version() == **i)
return false;
@@ -350,12 +362,7 @@
wrap_ptr_iter<dummy_version, version> versions_begin() const
{
- return real_package->versions_begin();
- }
-
- wrap_ptr_iter<dummy_version, version> versions_end() const
- {
- return real_package->versions_end();
+ return wrap_ptr_iter<dummy_version, version>(real_package->versions_begin(), real_package->versions_end());
}
};
@@ -403,12 +410,8 @@
wrap_ptr_iter<dummy_dep, dep> revdeps_begin() const
{
- return real_version->revdeps_begin();
- }
-
- wrap_ptr_iter<dummy_dep, dep> revdeps_end() const
- {
- return real_version->revdeps_end();
+ return wrap_ptr_iter<dummy_dep, dep>(real_version->revdeps_begin(),
+ real_version->revdeps_end());
}
};
@@ -451,12 +454,8 @@
wrap_ptr_iter<dummy_version, version> solvers_begin() const
{
- return real_dep->solvers_begin();
- }
-
- wrap_ptr_iter<dummy_version, version> solvers_end() const
- {
- return real_dep->solvers_end();
+ return wrap_ptr_iter<dummy_version, version>(real_dep->solvers_begin(),
+ real_dep->solvers_end());
}
};
@@ -488,6 +487,11 @@
return realiter!=other.realiter;
}
+ bool end() const
+ {
+ return realiter == realend;
+ }
+
const dep operator*() const
{
assert(realiter!=realend);
@@ -650,33 +654,18 @@
package_iterator packages_begin() const
{
- return packages.begin();
- }
-
- package_iterator packages_end() const
- {
- return packages.end();
+ return packages;
}
dep_iterator deps_begin() const
{
- return deps.begin();
- }
-
- dep_iterator deps_end() const
- {
- return deps.end();
+ return deps;
}
broken_dep_iterator broken_begin() const
{
return broken_dep_iterator(deps.begin(), deps.end());
}
-
- broken_dep_iterator broken_end() const
- {
- return broken_dep_iterator(deps.end(), deps.end());
- }
};
typedef generic_problem_resolver<dummy_universe> dummy_resolver;
@@ -685,7 +674,7 @@
{
out << d.get_source().get_package().get_name() << " " << d.get_source().get_name() << " -> {";
for(dummy_resolver::dep::solver_iterator i=d.solvers_begin();
- i!=d.solvers_end(); ++i)
+ !i.end(); ++i)
{
if(i!=d.solvers_begin())
out << ", ";