| | void * tbst_t_prev (struct tbst_traverser *trav) {
assert (trav != NULL);
if (trav->tbst_node == NULL)
return tbst_t_last (trav, trav->tbst_table);
else if (trav->tbst_node->tbst_tag[0] == TBST_THREAD) {
trav->tbst_node = trav->tbst_node->tbst_link[0];
return trav->tbst_node != NULL ? trav->tbst_node->tbst_data : NULL;
} else {
trav->tbst_node = trav->tbst_node->tbst_link[0];
while (trav->tbst_node->tbst_tag[1] == TBST_CHILD)
trav->tbst_node = trav->tbst_node->tbst_link[1];
return trav->tbst_node->tbst_data;
}
}
|