solver.c File Reference

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <assert.h>
#include "solver.h"
#include "bitmap.h"
#include "pool.h"
#include "util.h"
#include "policy.h"
#include "solverdebug.h"

Go to the source code of this file.

Defines

#define RULES_BLOCK   63
#define DECISIONMAP_TRUE(p)   ((p) > 0 ? (decisionmap[p] > 0) : (decisionmap[-p] < 0))
#define DECISIONMAP_FALSE(p)   ((p) > 0 ? (decisionmap[p] < 0) : (decisionmap[-p] > 0))
#define DECISIONMAP_UNDEF(p)   (decisionmap[(p) > 0 ? (p) : -(p)] == 0)

Functions

int solver_splitprovides (Solver *solv, Id dep)
int solver_dep_installed (Solver *solv, Id dep)
static void makeruledecisions (Solver *solv)
static void enabledisablelearntrules (Solver *solv)
static void makewatches (Solver *solv)
static void addwatches_rule (Solver *solv, Rule *r)
static Rulepropagate (Solver *solv, int level)
static int analyze (Solver *solv, int level, Rule *c, int *pr, int *dr, int *whyp)
void solver_reset (Solver *solv)
static void analyze_unsolvable_rule (Solver *solv, Rule *r, Id *lastweakp)
static int analyze_unsolvable (Solver *solv, Rule *cr, int disablerules)
static void revert (Solver *solv, int level)
static void watch2onhighest (Solver *solv, Rule *r)
static int setpropagatelearn (Solver *solv, int level, Id decision, int disablerules, Id ruleid)
static int selectandinstall (Solver *solv, int level, Queue *dq, int disablerules, Id ruleid)
Solversolver_create (Pool *pool)
void solver_free (Solver *solv)
void solver_run_sat (Solver *solv, int disablerules, int doweak)
static void removedisabledconflicts (Solver *solv, Queue *removed)
static void undo_removedisabledconflicts (Solver *solv, Queue *removed)
static void weaken_solvable_deps (Solver *solv, Id p)
static void findrecommendedsuggested (Solver *solv)
void solver_calculate_noobsmap (Pool *pool, Queue *job, Map *noobsmap)
static void solver_addjobrule (Solver *solv, Id p, Id d, Id job, int weak)
void solver_solve (Solver *solv, Queue *job)
void solver_calc_duchanges (Solver *solv, DUChanges *mps, int nmps)
int solver_calc_installsizechange (Solver *solv)
void solver_trivial_installable (Solver *solv, Queue *pkgs, Queue *res)

Define Documentation

#define RULES_BLOCK   63

Definition at line 27 of file solver.c.

#define DECISIONMAP_TRUE (  )     ((p) > 0 ? (decisionmap[p] > 0) : (decisionmap[-p] < 0))

Definition at line 468 of file solver.c.

Referenced by analyze(), analyze_unsolvable(), and propagate().

#define DECISIONMAP_FALSE (  )     ((p) > 0 ? (decisionmap[p] < 0) : (decisionmap[-p] > 0))

Definition at line 469 of file solver.c.

Referenced by propagate(), and removedisabledconflicts().

#define DECISIONMAP_UNDEF (  )     (decisionmap[(p) > 0 ? (p) : -(p)] == 0)

Definition at line 470 of file solver.c.


Function Documentation

int solver_splitprovides ( Solver solv,
Id  dep 
)
int solver_dep_installed ( Solver solv,
Id  dep 
)
static void makeruledecisions ( Solver solv  )  [static]
static void enabledisablelearntrules ( Solver solv  )  [static]
static void makewatches ( Solver solv  )  [static]
static void addwatches_rule ( Solver solv,
Rule r 
) [inline, static]
static Rule* propagate ( Solver solv,
int  level 
) [static]
static int analyze ( Solver solv,
int  level,
Rule c,
int *  pr,
int *  dr,
int *  whyp 
) [static]
void solver_reset ( Solver solv  ) 
static void analyze_unsolvable_rule ( Solver solv,
Rule r,
Id lastweakp 
) [static]
static int analyze_unsolvable ( Solver solv,
Rule cr,
int  disablerules 
) [static]
static void revert ( Solver solv,
int  level 
) [static]
static void watch2onhighest ( Solver solv,
Rule r 
) [inline, static]

Definition at line 1057 of file solver.c.

References _Rule::d, _Solver::decisionmap, _Solver::pool, _Rule::w2, and _Pool::whatprovidesdata.

Referenced by setpropagatelearn().

static int setpropagatelearn ( Solver solv,
int  level,
Id  decision,
int  disablerules,
Id  ruleid 
) [static]
static int selectandinstall ( Solver solv,
int  level,
Queue dq,
int  disablerules,
Id  ruleid 
) [static]
Solver* solver_create ( Pool pool  ) 
void solver_free ( Solver solv  ) 
void solver_run_sat ( Solver solv,
int  disablerules,
int  doweak 
)

Definition at line 1320 of file solver.c.

References analyze_unsolvable(), _Solver::branches, _Solver::cleandepsmap, _Queue::count, _Rule::d, _Solver::decisionmap, _Solver::decisionq, _Solver::decisionq_why, _Repo::disabled, _Solver::droporphanedmap, _Solver::droporphanedmap_all, _Solver::dupmap_all, _Queue::elements, _Repo::end, _Solver::featurerules, FOR_PROVIDES, FOR_RULELITERALS, _Repo::idarraydata, IF_POOLDEBUG, _Solver::ignorealreadyrecommended, _Solver::installed, _Solver::jobrules, map_free(), map_init(), MAPSET, MAPTST, _Solver::multiversionupdaters, _Solvable::name, _Solver::noobsoletes, _Solver::noupdate, _Solver::nrules, _Pool::nsolvables, _Repo::nsolvables, _Solvable::obsoletes, _Solver::orphaned, _Rule::p, policy_filter_unwanted(), POLICY_MODE_CHOOSE, POLICY_MODE_RECOMMEND, _Solver::pool, _Repo::pool, POOL_DEBUG, pool_installable(), propagate(), _Solver::propagate_index, queue_empty(), queue_free(), queue_init(), queue_push(), queue_pushunique(), _Solver::recommendations, _Solvable::recommends, _Solvable::repo, revert(), _Solver::rules, SAT_DEBUG_POLICY, SAT_DEBUG_PROPAGATE, SAT_DEBUG_RESULT, SAT_DEBUG_RULE_CREATION, SAT_DEBUG_SCHUBI, SAT_DEBUG_SOLVER, SAT_DEBUG_STATS, selectandinstall(), setpropagatelearn(), _Map::size, _Solver::solution_callback, _Solver::solution_callback_data, _Pool::solvables, solver_is_supplementing(), solver_printdecisionq(), solver_printdecisions(), solver_printruleclass(), solvid2str(), _Repo::start, _Solver::stats_learned, _Solver::stats_unsolvable, _Solvable::supplements, _Solver::updatemap, _Solver::updatemap_all, _Solver::updaterules, _Rule::w2, and _Pool::whatprovidesdata.

Referenced by refine_suggestion(), and solver_solve().

static void removedisabledconflicts ( Solver solv,
Queue removed 
) [static]
static void undo_removedisabledconflicts ( Solver solv,
Queue removed 
) [inline, static]

Definition at line 2188 of file solver.c.

References _Queue::count, _Solver::decisionmap, and _Queue::elements.

Referenced by findrecommendedsuggested().

static void weaken_solvable_deps ( Solver solv,
Id  p 
) [static]

Definition at line 2202 of file solver.c.

References _Rule::d, _Rule::p, queue_push(), _Solver::rules, _Rule::w2, and _Solver::weakruleq.

Referenced by solver_solve().

static void findrecommendedsuggested ( Solver solv  )  [static]
void solver_calculate_noobsmap ( Pool pool,
Queue job,
Map noobsmap 
)
static void solver_addjobrule ( Solver solv,
Id  p,
Id  d,
Id  job,
int  weak 
) [inline, static]

Definition at line 2442 of file solver.c.

References _Solver::nrules, queue_push(), _Solver::ruletojob, solver_addrule(), and _Solver::weakruleq.

Referenced by solver_solve().

void solver_solve ( Solver solv,
Queue job 
)

Definition at line 2457 of file solver.c.

References _Solver::allowarchchange, _Solver::allowdowngrade, _Pool::allowselfconflicts, _Solver::allowuninstall, _Solver::allowvendorchange, _Solver::choicerules, _Solver::choicerules_end, _Solver::cleandepsmap, _Queue::count, _Rule::d, _Solver::decisionq, _Solver::distupgrade, _Solver::distupgrade_removeunsupported, _Solver::dontinstallrecommended, _Solver::dontshowinstalledrecommended, _Solver::dosplitprovides, _Solver::droporphanedmap, _Solver::droporphanedmap_all, _Solver::dupmap_all, _Solver::duprules, _Solver::duprules_end, _Queue::elements, _Repo::end, _Solver::featurerules, _Solver::featurerules_end, findrecommendedsuggested(), _Solver::fixmap, _Solver::fixmap_all, _Solver::fixsystem, FOR_JOB_SELECT, FOR_PROVIDES, FOR_REPO_SOLVABLES, IF_POOLDEBUG, _Solver::ignorealreadyrecommended, _Pool::implicitobsoleteusesprovides, _Solver::infarchrules, _Solver::infarchrules_end, _Solver::installed, _Solver::job, _Solver::jobrules, _Solver::jobrules_end, _Solver::learntrules, makeruledecisions(), makewatches(), map_free(), map_grow(), map_init(), MAPSET, MAPTST, _Solvable::name, _Repo::name, _Solver::noinfarchcheck, _Solver::noobsoletes, _Solver::noupdateprovide, _Pool::novirtualconflicts, _Solver::nrules, _Pool::nsolvables, _Pool::obsoleteusescolors, _Pool::obsoleteusesprovides, _Solver::orphaned, _Rule::p, policy_create_obsolete_index(), _Solver::pool, _Repo::pool, pool_createwhatprovides(), POOL_DEBUG, pool_installable(), pool_queuetowhatprovides(), _Solver::problems, _Pool::promoteepoch, queue_empty(), queue_free(), queue_init(), queue_init_clone(), queue_push(), queue_shift(), _Solvable::repo, _Solver::rpmrules_end, _Solver::ruleassertions, _Solver::rules, _Solver::ruletojob, SAT_DEBUG_JOB, SAT_DEBUG_SCHUBI, SAT_DEBUG_SOLVER, SAT_DEBUG_STATS, sat_timems(), _Map::size, _Pool::solvables, solver_addchoicerules(), solver_addduprules(), solver_addinfarchrules(), solver_addjobrule(), solver_addrpmrulesforsolvable(), solver_addrpmrulesforupdaters(), solver_addrpmrulesforweak(), solver_addrule(), solver_addupdaterule(), solver_calculate_noobsmap(), SOLVER_CLEANDEPS, solver_createdupmaps(), solver_disablepolicyrules(), solver_disablerule(), SOLVER_DISTUPGRADE, SOLVER_DROP_ORPHANED, SOLVER_ERASE, solver_freedupmaps(), SOLVER_INSTALL, SOLVER_JOBMASK, SOLVER_LOCK, SOLVER_NOOBSOLETES, solver_prepare_solutions(), solver_printrule(), solver_run_sat(), solver_samerule(), solver_select2str(), SOLVER_SELECTMASK, SOLVER_SOLVABLE, SOLVER_SOLVABLE_ALL, solver_unifyrules(), SOLVER_UPDATE, SOLVER_USERINSTALLED, SOLVER_VERIFY, SOLVER_WEAK, SOLVER_WEAKENDEPS, _Repo::start, _Solver::stats_learned, _Solver::stats_unsolvable, SYSTEMSOLVABLE, _Solver::trans, transaction_calculate(), _Solver::updatemap, _Solver::updatemap_all, _Solver::updaterules, _Solver::updaterules_end, _Solver::updatesystem, _Rule::w2, weaken_solvable_deps(), _Solver::weakrulemap, _Solver::weakruleq, and _Pool::whatprovides.

void solver_calc_duchanges ( Solver solv,
DUChanges mps,
int  nmps 
)
int solver_calc_installsizechange ( Solver solv  ) 
void solver_trivial_installable ( Solver solv,
Queue pkgs,
Queue res 
)
Generated on Mon Dec 12 11:44:13 2011 for satsolver by  doxygen 1.6.3