Add API for iterating over rpmps problems
This commit is contained in:
parent
2240b4f8d6
commit
96ad2a1fee
44
lib/rpmps.c
44
lib/rpmps.c
|
@ -40,6 +40,50 @@ int rpmpsNumProblems(rpmps ps)
|
|||
return numProblems;
|
||||
}
|
||||
|
||||
rpmpsi rpmpsInitIterator(rpmps ps)
|
||||
{
|
||||
rpmpsi psi = NULL;
|
||||
if (ps != NULL) {
|
||||
psi = xcalloc(1, sizeof(*psi));
|
||||
psi->ps = rpmpsLink(ps, "iter ref");
|
||||
psi->ix = -1;
|
||||
}
|
||||
return psi;
|
||||
}
|
||||
|
||||
rpmpsi rpmpsFreeIterator(rpmpsi psi)
|
||||
{
|
||||
if (psi != NULL) {
|
||||
rpmpsUnlink(psi->ps, "iter unref");
|
||||
free(psi);
|
||||
psi = NULL;
|
||||
}
|
||||
return psi;
|
||||
}
|
||||
|
||||
int rpmpsNextIterator(rpmpsi psi)
|
||||
{
|
||||
int i = -1;
|
||||
|
||||
if (psi != NULL && ++psi->ix >= 0) {
|
||||
if (psi->ix < rpmpsNumProblems(psi->ps)) {
|
||||
i = psi->ix;
|
||||
} else {
|
||||
psi->ix = -1;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
|
||||
rpmProblem rpmpsProblem(rpmpsi psi)
|
||||
{
|
||||
rpmProblem p = NULL;
|
||||
if (psi != NULL && psi->ix >= 0 && psi->ix < rpmpsNumProblems(psi->ps)) {
|
||||
p = psi->ps->probs + psi->ix;
|
||||
}
|
||||
return p;
|
||||
}
|
||||
|
||||
rpmps rpmpsCreate(void)
|
||||
{
|
||||
rpmps ps = xcalloc(1, sizeof(*ps));
|
||||
|
|
35
lib/rpmps.h
35
lib/rpmps.h
|
@ -24,6 +24,8 @@ typedef struct rpmProblem_s * rpmProblem;
|
|||
*/
|
||||
typedef struct rpmps_s * rpmps;
|
||||
|
||||
typedef struct rpmpsi_s * rpmpsi;
|
||||
|
||||
/**
|
||||
* Enumerate transaction set problem types.
|
||||
*/
|
||||
|
@ -62,6 +64,11 @@ struct rpmps_s {
|
|||
int nrefs; /*!< Reference count. */
|
||||
};
|
||||
|
||||
struct rpmpsi_s {
|
||||
size_t ix;
|
||||
rpmps ps;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return formatted string representation of a problem.
|
||||
* @param prob rpm problem
|
||||
|
@ -103,6 +110,34 @@ rpmps XrpmpsLink (rpmps ps,
|
|||
*/
|
||||
int rpmpsNumProblems(rpmps ps);
|
||||
|
||||
/**
|
||||
* Initialize problem set iterator.
|
||||
* @param ps problem set
|
||||
* @return problem set iterator
|
||||
*/
|
||||
rpmpsi rpmpsInitIterator(rpmps ps);
|
||||
|
||||
/**
|
||||
* Destroy problem set iterator.
|
||||
* @param psi problem set iterator
|
||||
* @return problem set iterator (NULL)
|
||||
*/
|
||||
rpmpsi rpmpsFreeIterator(rpmpsi psi);
|
||||
|
||||
/**
|
||||
* Return next problem set iterator index
|
||||
* @param psi problem set iterator
|
||||
* @return iterator index, -1 on termination
|
||||
*/
|
||||
int rpmpsNextIterator(rpmpsi psi);
|
||||
|
||||
/**
|
||||
* Return current problem from problem set
|
||||
* @param psi problem set iterator
|
||||
* @return current rpmProblem
|
||||
*/
|
||||
rpmProblem rpmpsProblem(rpmpsi psi);
|
||||
|
||||
/**
|
||||
* Create a problem set.
|
||||
* @return new problem set
|
||||
|
|
Loading…
Reference in New Issue