| | void * rtbst_t_next (struct rtbst_traverser *trav) {
assert (trav != NULL);
if (trav->rtbst_node == NULL)
return rtbst_t_first (trav, trav->rtbst_table);
else if (trav->rtbst_node->rtbst_rtag == RTBST_THREAD) {
trav->rtbst_node = trav->rtbst_node->rtbst_link[1];
return trav->rtbst_node != NULL ? trav->rtbst_node->rtbst_data : NULL;
} else {
trav->rtbst_node = trav->rtbst_node->rtbst_link[1];
while (trav->rtbst_node->rtbst_link[0] != NULL)
trav->rtbst_node = trav->rtbst_node->rtbst_link[0];
return trav->rtbst_node->rtbst_data;
}
}
|