]> git.ipfire.org Git - thirdparty/libsolv.git/commitdiff
only create weakrulemap when needed
authorMichael Schroeder <mls@suse.de>
Wed, 13 May 2015 15:19:24 +0000 (17:19 +0200)
committerMichael Schroeder <mls@suse.de>
Wed, 13 May 2015 15:19:24 +0000 (17:19 +0200)
src/problems.c
src/solver.c
src/solverdebug.c

index 528aa2eaca9bfe97ec395034a54b0aaa880948b4..cedc172bff6e606e81eabd550c7e75ecc9b4d52b 100644 (file)
@@ -152,6 +152,8 @@ enableweakrules(Solver *solv)
   int i;
   Rule *r;
 
+  if (!solv->weakrulemap.size)
+    return;
   for (i = 1, r = solv->rules + i; i < solv->learntrules; i++, r++)
     {
       if (r->d >= 0) /* already enabled? */
index 9fee10054baa0f7af67a711123a160d38c29db55..3eca8e23bec32cdd2280f6e0e4a2e0f3c2298c20 100644 (file)
@@ -336,7 +336,7 @@ makeruledecisions(Solver *solv)
            continue;
 
          /* do weak rules in phase 2 */
-         if (ri < solv->learntrules && MAPTST(&solv->weakrulemap, ri))
+         if (ri < solv->learntrules && solv->weakrulemap.size && MAPTST(&solv->weakrulemap, ri))
            continue;
 
          v = r->p;
@@ -478,7 +478,7 @@ makeruledecisions(Solver *solv)
              if (rr->p != vv                        /* not affecting the literal */
                  && rr->p != -vv)
                continue;
-             if (MAPTST(&solv->weakrulemap, i))     /* weak: silently ignore */
+             if (solv->weakrulemap.size && MAPTST(&solv->weakrulemap, i))     /* weak: silently ignore */
                continue;
                
              POOL_DEBUG(SOLV_DEBUG_UNSOLVABLE, " - disabling rule #%d\n", i);
@@ -505,6 +505,8 @@ makeruledecisions(Solver *solv)
       /*
        * phase 2: now do the weak assertions
        */
+      if (!solv->weakrulemap.size)
+       break;                          /* no weak rules, no phase 2 */
       for (ii = 0; ii < solv->ruleassertions.count; ii++)
        {
          ri = solv->ruleassertions.elements[ii];
@@ -1108,7 +1110,7 @@ analyze_unsolvable_rule(Solver *solv, Rule *r, Id *lastweakp, Map *rseen)
          analyze_unsolvable_rule(solv, solv->rules + solv->learnt_pool.elements[i], lastweakp, rseen);
       return;
     }
-  if (MAPTST(&solv->weakrulemap, why))
+  if (solv->weakrulemap.size && MAPTST(&solv->weakrulemap, why))
     if (!*lastweakp || why > *lastweakp)
       *lastweakp = why;
   /* do not add pkg rules to problem */
@@ -4026,11 +4028,14 @@ solver_solve(Solver *solv, Queue *job)
   POOL_DEBUG(SOLV_DEBUG_STATS, "overall rule memory used: %d K\n", solv->nrules * (int)sizeof(Rule) / 1024);
 
   /* create weak map */
-  map_init(&solv->weakrulemap, solv->nrules);
-  for (i = 0; i < solv->weakruleq.count; i++)
+  if (solv->weakruleq.count)
     {
-      p = solv->weakruleq.elements[i];
-      MAPSET(&solv->weakrulemap, p);
+      map_grow(&solv->weakrulemap, solv->nrules);
+      for (i = 0; i < solv->weakruleq.count; i++)
+       {
+         p = solv->weakruleq.elements[i];
+         MAPSET(&solv->weakrulemap, p);
+       }
     }
 
   /* enable cleandepsmap creation if we have updatepkgs */
index 3e840462f4df03469f066f425434bf50eafffb62..39f5d781f4be9451bd4ead9de075175f1830923d 100644 (file)
@@ -108,7 +108,7 @@ solver_printruleclass(Solver *solv, int type, Rule *r)
   Id p = r - solv->rules;
   assert(p >= 0);
   if (p < solv->learntrules)
-    if (MAPTST(&solv->weakrulemap, p))
+    if (solv->weakrulemap.size && MAPTST(&solv->weakrulemap, p))
       POOL_DEBUG(type, "WEAK ");
   if (solv->learntrules && p >= solv->learntrules)
     POOL_DEBUG(type, "LEARNT ");