27 #define RULES_BLOCK 63
115 int record_proof = 1;
129 r = solv->
rules + ri;
131 if (r->
d < 0 || !r->
p || r->
w2)
164 if (v < 0 && solv->decisionmap[vv] < 0)
192 assert(i < solv->decisionq.count);
210 if (ri >= solv->
jobrules && ri < solv->jobrules_end)
240 if (ri >= solv->
jobrules && ri < solv->jobrules_end)
272 for (i = solv->
featurerules, rr = solv->
rules + i; i < solv->learntrules; i++, rr++)
289 if (i >= solv->
jobrules && i < solv->jobrules_end)
317 r = solv->
rules + ri;
318 if (r->
d < 0 || r->
w2)
348 if (v < 0 && solv->decisionmap[vv] < 0)
354 if (ri >= solv->
jobrules && ri < solv->jobrules_end)
383 for (i = solv->
learntrules, r = solv->
rules + i; i < solv->nrules; i++, r++)
386 while ((why = *whyp++) != 0)
388 assert(why > 0 && why < i);
389 if (solv->
rules[why].
d < 0)
393 if (why && r->
d >= 0)
402 else if (!why && r->
d < 0)
437 for (i = 1, r = solv->
rules + solv->
nrules - 1; i < solv->nrules; i++, r--)
439 for (i = 1, r = solv->
rules + 1; i < solv->nrules; i++, r++)
485 #define DECISIONMAP_TRUE(p) ((p) > 0 ? (decisionmap[p] > 0) : (decisionmap[-p] < 0))
486 #define DECISIONMAP_FALSE(p) ((p) > 0 ? (decisionmap[p] < 0) : (decisionmap[-p] > 0))
487 #define DECISIONMAP_UNDEF(p) (decisionmap[(p) > 0 ? (p) : -(p)] == 0)
511 Id p, pkg, other_watch;
535 for (rp = watches + pkg; *rp; rp = next_rp)
537 r = solv->
rules + *rp;
593 && r->
p != other_watch
638 watches[p] = r - solv->
rules;
659 decisionmap[other_watch] = level;
661 decisionmap[-other_watch] = -level;
701 Id d, v, vv, *dp, why;
703 int num = 0, l1num = 0;
717 d = c->
d < 0 ? -c->
d - 1 : c->
d;
752 if (!num && !--l1num)
767 if (num && --num == 0)
774 for (i = 0; i < r.
count; i++)
777 MAPCLR(&seen, v > 0 ? v : -v);
787 c = solv->
rules + why;
801 for (i = 0; i < r.
count; i++)
876 if (!*lastweakp || why > *lastweakp)
879 if (why < solv->rpmrules_end)
882 if (why >= solv->
jobrules && why < solv->jobrules_end)
885 if (why > solv->
infarchrules && why < solv->infarchrules_end)
891 if (why > solv->
duprules && why < solv->duprules_end)
926 Id d, v, vv, *dp, why;
930 int oldlearntpoolcount;
932 int record_proof = 1;
951 d = r->
d < 0 ? -r->
d - 1 : r->
d;
982 r = solv->
rules + why;
984 d = r->
d < 0 ? -r->
d - 1 : r->
d;
1015 if (lastweak >= solv->
jobrules && lastweak < solv->jobrules_end)
1021 if (lastweak >= solv->
choicerules && lastweak < solv->choicerules_end)
1039 for (i = oldproblemcount + 1; i < solv->
problems.
count - 1; i++)
1067 vv = v > 0 ? v : -v;
1099 d = r->
d < 0 ? -r->
d - 1 : r->
d;
1103 while ((v = *dp++) != 0)
1141 assert(ruleid >= 0);
1160 l =
analyze(solv, level, r, &p, &d, &why);
1161 assert(l > 0 && l < level);
1181 solv->
decisionmap[p > 0 ? p : -p] = p > 0 ? level : -level;
1222 for (i = 0; i < dq->
count; i++)
1233 for (i = 1; i < dq->
count; i++)
1370 int minimizationsteps;
1376 for (i = 1; i < solv->
nrules; i++)
1387 systemlevel = level + 1;
1405 minimizationsteps = 0;
1427 if (level < systemlevel)
1430 for (i = solv->
jobrules, r = solv->
rules + i; i < solv->jobrules_end; i++, r++)
1457 for (j = k = 0; j < dq.
count; j++)
1481 if (level <= olevel)
1484 systemlevel = level + 1;
1485 if (i < solv->jobrules_end)
1503 int passlevel = level;
1505 for (i = installedpos, n = installed->
start; n < installed->
end; i++, n++)
1510 if (i == installed->
end)
1511 i = installed->
start;
1513 if (s->
repo != installed)
1522 if (!rr->
p || rr->
d < 0)
1582 if (level <= olevel)
1584 if (level == 1 || level < passlevel)
1587 n = installed->
start;
1613 if (level <= olevel)
1615 if (level == 1 || level < passlevel)
1618 n = installed->
start;
1625 if (n < installed->
end)
1630 installedpos = installed->
start;
1632 systemlevel = level + 1;
1637 if (level < systemlevel)
1638 systemlevel = level;
1644 for (i = 1, n = 1; n < solv->
nrules; i++, n++)
1648 r = solv->
rules + i;
1656 if (r->
p < 0 || r->
w2 <= 0)
1684 while ((p = *dp++) != 0)
1709 assert(dq.
count > 1);
1719 if (level < systemlevel || level == 1)
1744 Id *recp, rec, pp, p;
1752 while ((rec = *recp++) != 0)
1792 Id obs, *obsp, po, ppo;
1806 while ((obs = *obsp++) != 0)
1810 for (i = j = 0; i < dqs.
count; i++)
1814 for (i = j = 0; i < dq.
count; i++)
1835 for (i = j = 0; i < dqs.
count; i++)
1862 for (i = j = 0; i < dqs.
count; i++)
1883 for (i = 0; i < dqs.
count; i++)
1910 for (i = 0; i < dq.
count; i++)
1914 for (i = 0; i < dqs.
count; i++)
1923 if (level <= olevel)
1926 if (i < dqs.count || solv->decisionq.count < decisioncount)
1935 for (i = 0; i < decisioncount; i++)
1947 while ((rec = *recp++) != 0)
1965 for (i = 1; i < dq.
count; i++)
1974 if (level <= olevel || solv->decisionq.count < decisioncount)
1988 int installedone = 0;
2008 if (installedone || i < solv->orphaned.count)
2021 if (i < solv->orphaned.count)
2046 for (j = 0; j < dq.
count; j++)
2067 int l = 0, lasti = -1, lastl = -1;
2088 minimizationsteps++;
2155 r = solv->
rules + why;
2156 if (r->
d < 0 && decisionmap[-p])
2162 decisionmap[-p] = 0;
2165 if (!removed->
count)
2170 for (i = n = 1, r = solv->
rules + i; n < solv->nrules; i++, r++, n++)
2175 r = solv->
rules + i;
2181 if (r->
p < 0 && !decisionmap[-r->
p])
2194 if (r->
p < 0 && decisionmap[-r->
p] == 0)
2199 while ((p = *dp++) != 0)
2201 if (
new && p ==
new)
2203 if (p < 0 && decisionmap[-p] == 0)
2223 decisionmap[-
new] = -1;
2234 for (i = 0; i < removed->
count; i += 2)
2250 for (i = 1, r = solv->
rules + i; i < solv->rpmrules_end; i++, r++)
2254 if ((r->
d == 0 || r->
d == -1) && r->
w2 < 0)
2269 Queue redoq, disabledq;
2278 Id obs, *obsp, p, po, ppo;
2290 while ((obs = *obsp++) != 0)
2300 for (i = solv->
jobrules, r = solv->
rules + i; i < solv->jobrules_end; i++, r++)
2325 Id rec, *recp, p, pp;
2339 while ((rec = *recp++) != 0)
2392 Id sug, *sugp, p, pp;
2406 while ((sug = *sugp++) != 0)
2455 for (i = 0; i < disabledq.
count; i++)
2465 Id how, what, select;
2467 for (i = 0; i < job->
count; i += 2)
2474 if (!noobsmap->
size)
2507 Map installcandidatemap;
2508 Id how, what, select,
name, weak, p, pp, d;
2512 int now, solve_start;
2566 for (i = 0; i < job->
count; i += 2)
2604 oldnrules = solv->
nrules;
2610 oldnrules = solv->
nrules;
2622 oldnrules = solv->
nrules;
2623 for (i = 0; i < job->
count; i += 2)
2634 MAPSET(&installcandidatemap, p);
2658 oldnrules = solv->
nrules;
2672 int possible = 0, installable = 0;
2677 if (
MAPTST(&addedmap, i))
2711 for (i = installed->
start, s = pool->
solvables + i; i < installed->
end; i++, s++)
2713 if (s->
repo != installed)
2738 for (i = installed->
start, s = pool->
solvables + i; i < installed->
end; i++, s++)
2742 if (s->
repo != installed)
2752 sr = r - (installed->
end - installed->
start);
2755 if (!sr->
p || (sr->
p == i && !sr->
d && !sr->
w2))
2768 memset(r, 0,
sizeof(*r));
2774 memset(sr, 0,
sizeof(*sr));
2799 for (i = 0; i < job->
count; i += 2)
2801 oldnrules = solv->
nrules;
2847 if (s->
name != name)
2853 if (
MAPTST(&installcandidatemap, p))
2896 if (!installed || s->
repo != installed)
2918 if (solv->
nrules == oldnrules)
2920 for (j = oldnrules; j < solv->
nrules; j++)
2938 for (i = solv->
infarchrules; i < solv->infarchrules_end; i++)
2968 POOL_DEBUG(
SAT_DEBUG_STATS,
"%d rpm rules, %d job rules, %d infarch rules, %d dup rules, %d choice rules\n", solv->
rpmrules_end - 1, solv->
jobrules_end - solv->
jobrules, solv->
infarchrules_end - solv->
infarchrules, solv->
duprules_end - solv->
duprules, solv->
choicerules_end - solv->
choicerules);
2986 for (i = 1, r = solv->
rules + i; i < solv->nrules; i++, r++)
2987 if (r->
p && !r->
w2 && (r->
d == 0 || r->
d == -1))