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