예제 #1
0
파일: ast.c 프로젝트: accreator/MYCC
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;
    }
예제 #2
0
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;
}
예제 #3
0
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++;
}