_copy_iter_cond (ira_copy_iterator *i, ira_copy_t *cp) { int n; for (n = i->n; n < ira_copies_num; n++) if (ira_copies[n] != NULL) { *cp = ira_copies[n]; i->n = n + 1; return true; } return false; } /* Loop over all copies. In each iteration, C is set to the next copy. ITER is an instance of ira_copy_iterator used to iterate the copies. */ #define FOR_EACH_COPY(C, ITER) \ for (ira_copy_iter_init (&(ITER)); \ ira_copy_iter_cond (&(ITER), &(C));)