static const Item *_rb_tree_current_frag_match_item(Frag_Match_Info *fmi_p) { if( CURR_FRAG(fmi_p) == NULL ) return NULL; else return RB_NODE_ITEM( CURR_RBT_FRAG(fmi_p) ); }
static const char *_rb_tree_advance_frag_match(QSP_ARG_DECL Frag_Match_Info * fmi_p, int direction ) { Item *ip; // there may be no items!? assert( fmi_p != NULL ); if( direction == CYC_FORWARD ){ if( CURR_FRAG(fmi_p) == LAST_FRAG(fmi_p) ) return NULL; else { SET_CURR_FRAG(fmi_p, rb_successor_node( CURR_RBT_FRAG(fmi_p) ) ); assert( CURR_FRAG(fmi_p) != NULL ); } } else { if( CURR_FRAG(fmi_p) == FIRST_FRAG(fmi_p) ) return NULL; else { SET_CURR_FRAG(fmi_p,rb_predecessor_node( CURR_RBT_FRAG(fmi_p) )); assert( CURR_FRAG(fmi_p) != NULL ); } } ip = RB_NODE_ITEM( CURR_RBT_FRAG(fmi_p) ); return ITEM_NAME(ip); }
static void _add_rb_node_to_list(QSP_ARG_DECL qrb_node *rbn_p, qrb_tree *tree_p) { Node *np; Item *ip; ip = RB_NODE_ITEM(rbn_p); np = mk_node(ip); addTail( RB_TREE_ITEM_LIST(tree_p), np ); }