int solvable_lookup_deparray(Solvable *s, Id keyname, Queue *q, Id marker) { if (!s->repo) { queue_empty(q); return 0; } return repo_lookup_deparray(s->repo, s - s->repo->pool->solvables, keyname, q, marker); }
void repo_set_deparray(Repo *repo, Id p, Id keyname, Queue *q, Id marker) { Repodata *data; if (marker) { /* complex case, splice old and new arrays */ int i; Queue q2; queue_init(&q2); repo_lookup_deparray(repo, p, keyname, &q2, -marker); if (marker > 0) { if (q->count) { queue_push(&q2, marker); for (i = 0; i < q->count; i++) queue_push(&q2, q->elements[i]); } } else { if (q2.count) queue_insert(&q2, 0, -marker); queue_insertn(&q2, 0, q->count); for (i = 0; i < q->count; i++) q2.elements[i] = q->elements[i]; } repo_set_deparray(repo, p, keyname, &q2, 0); queue_free(&q2); return; } if (p >= 0) { Solvable *s = repo->pool->solvables + p; switch (keyname) { case SOLVABLE_PROVIDES: s->provides = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_OBSOLETES: s->obsoletes = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_CONFLICTS: s->conflicts = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_REQUIRES: s->requires = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_RECOMMENDS: s->recommends = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_SUGGESTS: s->suggests = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_SUPPLEMENTS: s->supplements = repo_set_idarray_solvable(repo, q); return; case SOLVABLE_ENHANCES: s->enhances = repo_set_idarray_solvable(repo, q); return; } } data = repo_last_repodata(repo); repodata_set_idarray(data, p, keyname, q); }