- int i, fav, disfav, count;
- if (!solv->favormap.size)
- return;
- for (i = fav = disfav = 0, count = plist->count; i < count; i++)
- {
- Id p = plist->elements[i];
- if (!MAPTST(&solv->favormap, p))
- continue;
- if (solv->isdisfavormap.size && MAPTST(&solv->isdisfavormap, p))
- {
- /* disfavored package. bring to back */
- if (i < plist->count - 1)
- {
- memmove(plist->elements + i, plist->elements + i + 1, (plist->count - 1 - i) * sizeof(Id));
- plist->elements[plist->count - 1] = p;
- }
- i--;
- count--;
- disfav++;
- }
- else
- {
- /* favored package. bring to front */
- if (i > fav)
- memmove(plist->elements + fav + 1, plist->elements + fav, (i - fav) * sizeof(Id));
- plist->elements[fav++] = p;
- }
- }
- /* if we have multiple favored/disfavored packages, sort by favorq index */
- if (fav > 1)
- sort_by_favorq(solv->favorq, plist->elements, fav);
- if (disfav > 1)
- sort_by_favorq(solv->favorq, plist->elements + plist->count - disfav, disfav);
+ if (solv->favormap && plist->count > 1)
+ solv_sort(plist->elements, plist->count, sizeof(Id), sort_by_favor_cmp, solv->favormap);