Author: matz Date: Thu Dec 27 22:39:00 2007 New Revision: 8150 URL: http://svn.opensuse.org/viewcvs/zypp?rev=8150&view=rev Log: Enable ATTR_INTLIST to contain zeros. Use the same encoding as IDARRAY. Modified: trunk/sat-solver/src/attr_store.c trunk/sat-solver/src/attr_store_p.h trunk/sat-solver/src/repo_solv.c trunk/sat-solver/tools/dumpattr.c trunk/sat-solver/tools/dumpsolv.c Modified: trunk/sat-solver/src/attr_store.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/attr_store.c?rev=8150&r1=8149&r2=8150&view=diff ============================================================================== --- trunk/sat-solver/src/attr_store.c (original) +++ trunk/sat-solver/src/attr_store.c Thu Dec 27 22:39:00 2007 @@ -369,24 +369,19 @@ add_attr_intlist_int (Attrstore *s, unsigned int entry, Id name, int val) { LongNV *nv = find_attr (s, entry, name); - if (val == 0) - return; if (nv) { - unsigned len = 0; - while (nv->v.intlist[len]) - len++; + unsigned len = nv->v.intlist[0]++; nv->v.intlist = realloc (nv->v.intlist, (len + 2) * sizeof (nv->v.intlist[0])); - nv->v.intlist[len] = val; - nv->v.intlist[len+1] = 0; + nv->v.intlist[len+1] = val; } else { LongNV mynv; mynv.key = add_key (s, name, TYPE_ATTR_INTLIST, 0); mynv.v.intlist = malloc (2 * sizeof (mynv.v.intlist[0])); - mynv.v.intlist[0] = val; - mynv.v.intlist[1] = 0; + mynv.v.intlist[0] = 1; + mynv.v.intlist[1] = val; add_attr (s, entry, mynv); } } @@ -437,9 +432,9 @@ { case TYPE_ATTR_INTLIST: { - unsigned len = 0; - while (nv->v.intlist[len]) - add_attr_intlist_int (s, dest, s->keys[nv->key].name, nv->v.intlist[len++]); + unsigned i, len = nv->v.intlist[0]; + for (i = 0; i < len; i++) + add_attr_intlist_int (s, dest, s->keys[nv->key].name, nv->v.intlist[i + 1]); } break; case TYPE_ATTR_LOCALIDS: @@ -523,10 +518,11 @@ } break; case TYPE_ATTR_INTLIST: - { - unsigned i; - while ((i = read_id(fp, 0)) != 0) - add_attr_intlist_int (s, entry, name, i); + { + int i; + while ((i = read_id(fp, 0)) & 64) + add_attr_intlist_int (s, entry, name, (i & 63) | ((i >> 1) & ~63)); + add_attr_intlist_int (s, entry, name, (i & 63) | ((i >> 1) & ~63)); } break; case TYPE_ATTR_LOCALIDS: @@ -881,11 +877,18 @@ case TYPE_ATTR_INTLIST: { const int *il = nv[ofs].v.intlist; - int i; - for (; (i = *il) != 0; il++, old_mem += 4) - add_num (s->flat_attrs, s->attr_next_free, i, FLAT_ATTR_BLOCK); - add_num (s->flat_attrs, s->attr_next_free, 0, FLAT_ATTR_BLOCK); - old_mem+=4; + int len = *il++; + //add_num (s->flat_attrs, s->attr_next_free, len, FLAT_ATTR_BLOCK); + old_mem += 4 * (len + 1); + while (len--) + { + int i = *il++; + if (i >= 64) + i = (i & 63) | ((i & ~63) << 1); + if (len) + i |= 64; + add_num (s->flat_attrs, s->attr_next_free, i, FLAT_ATTR_BLOCK); + } xfree (nv[ofs].v.intlist); break; } @@ -974,9 +977,9 @@ { int val; get_num (ai.as_numlist, val); - if (!val) + add_attr_intlist_int (s, i, ai.name, (val & 63) | ((val >> 1) & ~63)); + if (!(val & 64)) break; - add_attr_intlist_int (s, i, ai.name, val); } break; } Modified: trunk/sat-solver/src/attr_store_p.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/attr_store_p.h?rev=8150&r1=8149&r2=8150&view=diff ============================================================================== --- trunk/sat-solver/src/attr_store_p.h (original) +++ trunk/sat-solver/src/attr_store_p.h Thu Dec 27 22:39:00 2007 @@ -179,12 +179,12 @@ } case TYPE_ATTR_INTLIST: { - ai->as_numlist = ai->attrs_next; + ai->as_numlist = ai->attrs_next; while (1) { int val; get_num (ai->attrs_next, val); - if (!val) + if (!(val & 64)) break; } break; Modified: trunk/sat-solver/src/repo_solv.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/src/repo_solv.c?rev=8150&r1=8149&r2=8150&view=diff ============================================================================== --- trunk/sat-solver/src/repo_solv.c (original) +++ trunk/sat-solver/src/repo_solv.c Thu Dec 27 22:39:00 2007 @@ -269,6 +269,7 @@ case TYPE_IDVALUEARRAY: case TYPE_IDVALUEVALUEARRAY: case TYPE_REL_IDARRAY: + case TYPE_ATTR_INTLIST: while ((read_u8(data) & 0xc0) != 0) ; break; @@ -297,7 +298,6 @@ case TYPE_ATTR_INT: read_id(data, 0); break; - case TYPE_ATTR_INTLIST: case TYPE_ATTR_LOCALIDS: while (read_id(data, 0) != 0) ; Modified: trunk/sat-solver/tools/dumpattr.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/dumpattr.c?rev=8150&r1=8149&r2=8150&view=diff ============================================================================== --- trunk/sat-solver/tools/dumpattr.c (original) +++ trunk/sat-solver/tools/dumpattr.c Thu Dec 27 22:39:00 2007 @@ -49,9 +49,9 @@ { int val; get_num (ai.as_numlist, val); - if (!val) + fprintf (stdout, " %d", (val & 63) | ((val >> 1) & ~63)); + if (!(val & 64)) break; - fprintf (stdout, " %d", val); } fprintf (stdout, "\n"); break; Modified: trunk/sat-solver/tools/dumpsolv.c URL: http://svn.opensuse.org/viewcvs/zypp/trunk/sat-solver/tools/dumpsolv.c?rev=8150&r1=8149&r2=8150&view=diff ============================================================================== --- trunk/sat-solver/tools/dumpsolv.c (original) +++ trunk/sat-solver/tools/dumpsolv.c Thu Dec 27 22:39:00 2007 @@ -46,9 +46,9 @@ { int val; get_num (ai.as_numlist, val); - if (!val) + fprintf (stdout, " %d", (val & 63) | ((val >> 1) & ~63)); + if (!(val & 64)) break; - fprintf (stdout, " %d", val); } fprintf (stdout, "\n"); break; -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org