static void iter_node_scion_rev(btIterator *iter) { bt *btr = iter->btr; fol_t *fl = (fol_t *)iter->data; bt_n *kid = NODES(iter->btr, iter->bln->self)[iter->bln->in]; bool scioned = (fl->diff > kid->scion); //DEBUG_ITER_NODE_SCION_REV if (scioned) { fl->cnt += kid->scion + 1; // +1 for NODE itself if (btr->dirty) fl->cnt += getDR(btr, iter->bln->self, iter->bln->ik); fl->diff = fl->ofst - fl->cnt; if (fl->diff < 0) { fl->over = 0; return; } if (iter->bln->ik) iter->bln->ik--; if (iter->bln->in) iter->bln->in--; else toparentrecurserev(iter); if (!fl->diff) { fl->over = 0; return; } } else { fl->cnt++; if (btr->dirty) fl->cnt += getDR(btr, iter->bln->self, iter->bln->ik); fl->diff = fl->ofst - fl->cnt; if (fl->diff < 0) { fl->over = 0; return; } GET_NEW_CHILD(iter) tochildrecurserev(iter, NODES(iter->btr, iter->bln->self)[iter->bln->in]); if (!fl->diff) { fl->over = 0; return; } } //printf("END iter_node_scion_rev: key: "); DUMP_CURR_KEY }
static void iter_leaf_rev(btIterator *iter) { //printf("iter_leaf_rev\n"); if (iter->bln->ik) iter->bln->ik--; else toparentrecurserev(iter); }