[Aptitude-svn-commit] r4232 - in branches/aptitude-0.3/aptitude: .
src/generic
Daniel Burrows
dburrows at costa.debian.org
Sat Sep 24 16:11:24 UTC 2005
Author: dburrows
Date: Sat Sep 24 16:11:21 2005
New Revision: 4232
Modified:
branches/aptitude-0.3/aptitude/ChangeLog
branches/aptitude-0.3/aptitude/src/generic/resolver_manager.cc
branches/aptitude-0.3/aptitude/src/generic/resolver_manager.h
Log:
Eliminate a bunch of duplicated code.
Modified: branches/aptitude-0.3/aptitude/ChangeLog
==============================================================================
--- branches/aptitude-0.3/aptitude/ChangeLog (original)
+++ branches/aptitude-0.3/aptitude/ChangeLog Sat Sep 24 16:11:21 2005
@@ -1,5 +1,9 @@
2005-09-24 Daniel Burrows <dburrows at debian.org>
+ * src/generic/resolver_manager.cc, src/generic/resolver_manager.h:
+
+ Collect all the resolver manipulations into a common routine.
+
* src/generic/problemresolver/problemresolver.h:
Add a set of "approved breaks" that should provide a more
Modified: branches/aptitude-0.3/aptitude/src/generic/resolver_manager.cc
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/resolver_manager.cc (original)
+++ branches/aptitude-0.3/aptitude/src/generic/resolver_manager.cc Sat Sep 24 16:11:21 2005
@@ -707,15 +707,15 @@
return rbox.take();
}
-void resolver_manager::reject_version(const aptitude_resolver_version &ver)
+template<typename T>
+void resolver_manager::resolver_manipulation(const T &t,
+ void (generic_problem_resolver<aptitude_universe>::*action)(const T &, undo_group *))
{
threads::mutex::lock l(mutex);
background_suspender bs(*this);
- assert(resolver);
-
undo_group *undo = new undo_group;
- resolver->reject_version(ver, undo);
+ (resolver->*action)(t, undo);
if(undo->empty())
delete undo;
else
@@ -726,27 +726,14 @@
state_changed();
}
-void resolver_manager::unreject_version(const aptitude_resolver_version &ver)
+void resolver_manager::reject_version(const aptitude_resolver_version &ver)
{
- threads::mutex::lock l(mutex);
- background_suspender bs(*this);
-
- assert(resolver);
-
- undo_group *undo = new undo_group;
- resolver->unreject_version(ver, undo);
- if(undo->empty())
- delete undo;
- else
- undos->add_item(undo);
-
-
- out_of_solutions.take();
- out_of_solutions.put(false);
+ resolver_manipulation(ver, &aptitude_resolver::reject_version);
+}
- l.release();
- bs.unsuspend();
- state_changed();
+void resolver_manager::unreject_version(const aptitude_resolver_version &ver)
+{
+ resolver_manipulation(ver, &aptitude_resolver::unreject_version);
}
bool resolver_manager::is_rejected(const aptitude_resolver_version &ver)
@@ -759,43 +746,12 @@
void resolver_manager::mandate_version(const aptitude_resolver_version &ver)
{
- threads::mutex::lock l(mutex);
- background_suspender bs(*this);
-
- assert(resolver);
-
- undo_group *undo = new undo_group;
- resolver->mandate_version(ver, undo);
- if(undo->empty())
- delete undo;
- else
- undos->add_item(undo);
-
- l.release();
- bs.unsuspend();
- state_changed();
+ resolver_manipulation(ver, &aptitude_resolver::mandate_version);
}
void resolver_manager::unmandate_version(const aptitude_resolver_version &ver)
{
- threads::mutex::lock l(mutex);
- background_suspender bs(*this);
-
- assert(resolver);
-
- undo_group *undo = new undo_group;
- resolver->unmandate_version(ver, undo);
- if(undo->empty())
- delete undo;
- else
- undos->add_item(undo);
-
- out_of_solutions.take();
- out_of_solutions.put(false);
-
- l.release();
- bs.unsuspend();
- state_changed();
+ resolver_manipulation(ver, &aptitude_resolver::unmandate_version);
}
bool resolver_manager::is_mandatory(const aptitude_resolver_version &ver)
@@ -808,43 +764,12 @@
void resolver_manager::harden_dep(const aptitude_resolver_dep &dep)
{
- threads::mutex::lock l(mutex);
- background_suspender bs(*this);
-
- assert(resolver);
-
- undo_group *undo = new undo_group;
- resolver->harden(dep, undo);
- if(undo->empty())
- delete undo;
- else
- undos->add_item(undo);
-
- l.release();
- bs.unsuspend();
- state_changed();
+ resolver_manipulation(dep, &aptitude_resolver::harden);
}
void resolver_manager::unharden_dep(const aptitude_resolver_dep &dep)
{
- threads::mutex::lock l(mutex);
- background_suspender bs(*this);
-
- assert(resolver);
-
- undo_group *undo = new undo_group;
- resolver->unharden(dep);
- if(undo->empty())
- delete undo;
- else
- undos->add_item(undo);
-
- out_of_solutions.take();
- out_of_solutions.put(false);
-
- l.release();
- bs.unsuspend();
- state_changed();
+ resolver_manipulation(dep, &aptitude_resolver::unharden);
}
bool resolver_manager::is_hardened(const aptitude_resolver_dep &dep)
Modified: branches/aptitude-0.3/aptitude/src/generic/resolver_manager.h
==============================================================================
--- branches/aptitude-0.3/aptitude/src/generic/resolver_manager.h (original)
+++ branches/aptitude-0.3/aptitude/src/generic/resolver_manager.h Sat Sep 24 16:11:21 2005
@@ -43,7 +43,9 @@
class aptitude_resolver_version;
class aptitude_resolver_dep;
template<typename PackageUniverse> class generic_solution;
+template<typename PackageUniverse> class generic_problem_resolver;
class aptitude_resolver;
+class undo_group;
class undo_list;
/** Manages a resolver for a single cache object. When broken
@@ -284,9 +286,18 @@
*/
void unsuspend_background_thread();
-
/** Create a resolver if necessary. */
void maybe_create_resolver();
+
+ /** Collects common code for the resolver manipulations such as
+ * reject_version, unreject_version, etc: locks this class,
+ * suspends the resolver, runs the manipulation and adds any undo
+ * that is generated to the undo list, and finally executes
+ * state_changed().
+ */
+ template<typename T>
+ void resolver_manipulation(const T &t,
+ void (generic_problem_resolver<aptitude_universe>::*action)(const T &, undo_group *));
public:
/** Create a new resolver manager for the given cache file. */
resolver_manager(aptitudeDepCache *cache);
@@ -436,6 +447,7 @@
/** \return \b true if the given dep is hardened. */
bool is_hardened(const aptitude_resolver_dep &dep);
+
/** Requires that resolver_exists is \b true. Force the resolver to
* leave the given soft dependency broken.
*/
@@ -448,6 +460,7 @@
bool is_forced_broken(const aptitude_resolver_dep &dep);
+
/** \return \b true if undo items exist in this resolver manager. */
bool has_undo_items();
More information about the Aptitude-svn-commit
mailing list