void *gt_ranked_list_iter_next(GtRankedListIter *ranked_list_iter) { /* return gt_rbtree_iter_prev(ranked_list_iter); */ void *data = NULL; if (ranked_list_iter->current_elem != NULL) { data = gt_dlistelem_get_data(ranked_list_iter->current_elem); ranked_list_iter->current_elem = gt_dlistelem_previous(ranked_list_iter->current_elem); } return data; }
static void add_children_to_stack(GtArray *feature_stack, const GtFeatureNode *fn) { GtFeatureNode *child; GtDlistelem *dlistelem; gt_assert(feature_stack && fn && fn->children); /* add the children backwards to traverse in order */ for (dlistelem = gt_dlist_last(fn->children); dlistelem != NULL; dlistelem = gt_dlistelem_previous(dlistelem)) { child = gt_dlistelem_get_data(dlistelem); gt_array_add(feature_stack, child); } }
GtFeatureNodeIterator* gt_feature_node_iterator_new(const GtFeatureNode *fn) { GtFeatureNodeIterator *fni; GtFeatureNode *child_feature; GtDlistelem *dlistelem; gt_assert(fn); fni = feature_node_iterator_new_base(fn); if (gt_feature_node_is_pseudo((GtFeatureNode*) fn)) { /* add the children backwards to traverse in order */ for (dlistelem = gt_dlist_last(fn->children); dlistelem != NULL; dlistelem = gt_dlistelem_previous(dlistelem)) { child_feature = (GtFeatureNode*) gt_dlistelem_get_data(dlistelem); gt_array_add(fni->feature_stack, child_feature); } } else gt_array_add(fni->feature_stack, fni->fn); gt_assert(gt_array_size(fni->feature_stack)); fni->direct = false; return fni; }