NODE_T * create_node_program(int num, ...) { va_list ap; NODE_T *node; va_start(ap, num); if(num == 0) { node = node_t_new(); node->type = PROGRAM; node->nxtnum = 0; } else if(num == 1) { node = node_t_new(); node->type = PROGRAM; node_t_enlarge_nxt(node); node->nxt[0] = va_arg(ap, NODE_T*); node->nxtnum = 1; }
node_t * node_t_insert(node_t *node, void *label, int (*compare)(void *, void *)) { if(NULL == node) { node = node_t_new(label); } else { if(0 < compare(node->label, label)) { node->left = node_t_insert(node->left, label, compare); } else { node->right = node_t_insert(node->right, label, compare); } } return node; }
void list_t_add_at(list_t *list, size_t index, void *element) { node_t *node = node_t_new(element); if(NULL == list->first) { node->next = node; list->first = node; } else { node_t *tmp = list->first; while(list->first != tmp->next && --index) tmp = tmp->next; if(list->first == tmp->next) { node->next = list->first; } else { node->next = tmp->next; } tmp->next = node; } list->length++; }