Add a saner rpmps iteration interface
authorPanu Matilainen <pmatilai@redhat.com>
Fri, 26 Mar 2010 06:50:30 +0000 (08:50 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Fri, 26 Mar 2010 06:50:30 +0000 (08:50 +0200)
- simply return the actual problem objects from the iterator instead
  of "index" which is not usable for anything outside rpmps.c
- implement rpmpsNexIterator() on top of the new rpmpsiNext() as
  backwards compatibility for now

lib/rpmps.c
lib/rpmps.h

index 46e4a08..980add8 100644 (file)
@@ -69,18 +69,23 @@ rpmpsi rpmpsFreeIterator(rpmpsi psi)
     return NULL;
 }
 
-int rpmpsNextIterator(rpmpsi psi)
+rpmProblem rpmpsiNext(rpmpsi psi)
 {
-    int i = -1;
-
-    if (psi != NULL && ++psi->ix >= 0) {
-       if (psi->ix < rpmpsNumProblems(psi->ps)) {
-           i = psi->ix;
+    rpmProblem p = NULL;
+    if (psi != NULL && psi->ps != NULL && ++psi->ix >= 0) {
+       rpmps ps = psi->ps;
+       if (psi->ix < ps->numProblems) {
+           p = ps->probs[psi->ix];
        } else {
            psi->ix = -1;
-       }            
+       }
     }
-    return i;
+    return p;
+}
+
+int rpmpsNextIterator(rpmpsi psi)
+{
+    return (rpmpsiNext(psi) != NULL) ? psi->ix : -1;
 }
 
 rpmProblem rpmpsGetProblem(rpmpsi psi)
index 526b24a..4fc8875 100644 (file)
@@ -55,6 +55,13 @@ rpmpsi rpmpsInitIterator(rpmps ps);
 rpmpsi rpmpsFreeIterator(rpmpsi psi);
 
 /** \ingroup rpmps
+ * Return next problem from iterator
+ * @param psi          problem set iterator
+ * @return             next problem (weak ref), NULL on termination
+ */
+rpmProblem rpmpsiNext(rpmpsi psi);
+
+/** \ingroup rpmps
  * Return next problem set iterator index
  * @param psi          problem set iterator
  * @return             iterator index, -1 on termination