Exemple #1
0
void *DArray_pop(DArray *array)
{
    check(array->end - 1 >= 0, "Attempt to pop from empty array.");

    void *el = DArray_remove(array, array->end - 1);
    array->end--;

    if(DArray_end(array) > (int)array->expand_rate && DArray_end(array) % array->expand_rate) {
        DArray_contract(array);
    }

    return el;
error:
    return NULL;
}
Exemple #2
0
void print_DArray_IDinfo ( DArray *array)
{
    int i = 0;
    if(array->element_size > 0) {
        PrintVisitor* pV = print_visitor_new();

        for(i = 0; i < DArray_end(array); i++) {
            HashmapNode* node = (HashmapNode*) DArray_get(array,i);
            ID_info* idi = (ID_info*)node->data;
            if(idi) {
                char* type = string_from_ID_info(idi);
                if(type)
                {
                    switch (idi->type){
                        case 0:
                            debug("Const  %10s  ID: %20s  : Remove %d   isTrigger %d    isPrint  %d    Value %d\n\n", type, idi->id, idi->k_remove, idi->isTrigger, idi->isPrint, *(int*) idi->value);
                            break;
                        case 1:
                            debug("Input  %10s  ID: %20s  : Remove %d    isTrigger %d    isPrint  %d\n\n", type, idi->id, idi->k_remove,  idi->isTrigger, idi->isPrint);
                            break;
                        case 2:{
                            debug("Output %10s  ID: %20s  : Remove %d    isTrigger %d    isPrint  %d    Value:\n\n", type, idi->id, idi->k_remove,  idi->isTrigger, idi->isPrint);
                            ast* value = (ast*) idi->value;
                            value->accept(value, pV->visitor);
                            debug("\n");
                            break;
                        }
                        case 3:{
                            debug("Template %10s  ID: %20s  : Remove -1    isTrigger -1    isPrint  -1    Value:\n", type, idi->id);
                            debug("   Parameter:  ");
                            list_t* iter = idi->parameter;
                            do{
                                PARA_info* pI = (PARA_info*) iter->data;
                                if(pI->valuetype == 0)
                                    debug("%s: bool,  ", pI->id );
                                else{
                                    if(pI->valuetype == 1)
                                        debug("%s: int,  ", pI->id );
                                    else
                                        debug("%s: double,  ", pI->id);
                                }
                                iter = iter->succ;
                            } while (iter != idi->parameter);
                            debug("\n");
                            ast* value = (ast*) idi->value;
                            value->accept(value, pV->visitor);
                            debug("\n\n");
                            break;
                        }
                        default:
                            debug("error: 0-3 but was: %d\n\n", idi->type);
                            exit(1);
                    }
                }
            }
        }
        pV->destroy(pV);
    }
}
Exemple #3
0
void 
ShiftFrom(DArray *close, int from)
{
    assert(close != NULL && "NULL DArray pointer");
    assert(BUCKET_K - 1 < DArray_max(close) && "Too small DArray");
    assert(0 <= from && from <= DArray_end(close) && "Bad shift index");

    if (DArray_end(close) == BUCKET_K)
        free(DArray_last(close));

    int i;
    for (i = DArray_end(close) - 1; i > from; i--)
    {
        struct CloseNode *tmp = DArray_get(close, i - 1);
        DArray_set(close, i, tmp);
    }
}
Exemple #4
0
int DArray_push(DArray *array, void *el) {
    array->contents[array->end] = el;
    array->end++;

    if (DArray_end(array) >= DArray_max(array)) {
        return DArray_expand(array);
    } else {
        return 0;
    }
}
Exemple #5
0
static inline int Hashmap_get_node(Hashmap* map, uint32_t hash, DArray* bucket, void* key) {
    int i = 0;

    for(i = 0; i < DArray_end(bucket); i++) {
        debug("TRY: %d", i);
        HashmapNode* node = DArray_get(bucket, i);
        if(node->hash == hash && map->compare(node->key, key) == 0) {
            return i;
        }
    }

    return -1;
}
Exemple #6
0
void print_DArray_LinkedList( DArray *array)
{
    int i = 0;
    if(array->end > 0) {
        debug("Bucket:\n");
        PrintVisitor* pV = print_visitor_new();

        for(i = 0; i < DArray_end(array); i++) {
            HashmapNode* node = (HashmapNode*) DArray_get(array,i);
            list_t* list = (list_t*)node->data;
            list_t* iter = list;
            debug("List %s:\n", node->key);
            do{
                ID_info* idi = (ID_info*) iter->data;
                if(idi) {
                    char* type = string_from_ID_info(idi);
                    if(type)
                    switch (idi->type){
                        case 0:
                            debug("     Const  %10s  ID: %20s  : Remove %d   isTrigger %d    isPrint  %d    Value %d\n", type, idi->id, idi->k_remove, idi->isTrigger, idi->isPrint, *(int*) idi->value);
                            break;
                        case 1:
                            debug("     Input  %10s  ID: %20s  : Remove %d    isTrigger %d    isPrint  %d\n", type, idi->id, idi->k_remove,  idi->isTrigger, idi->isPrint);
                            break;
                        case 2:{
                            debug("     Output %10s  ID: %20s  : Remove %d    isTrigger %d    isPrint  %d    Value:\n", type, idi->id, idi->k_remove,  idi->isTrigger, idi->isPrint);
                            ast* value = (ast*) idi->value;
                            value->accept(value, pV->visitor);
                            break;
                        }
                        case 3:{
                            debug("     Template %10s  ID: %20s  : Remove -1    isTrigger -1    isPrint  -1    Value:\n", type, idi->id);
                            ast* value = (ast*) idi->value;
                            value->accept(value, pV->visitor);
                            break;
                        }
                        default:
                            debug("     error: 0-3 but was: %d\n", idi->type);
                            exit(1);
                    }
                }
                iter = iter->succ;
            } while(iter != list);
        }
        pV->destroy(pV);
    }
}
Exemple #7
0
void print_DArray_StringList( DArray *array)
{
    int i = 0;
    if(array->end > 0) {
        printf("Bucket:\n");
        for(i = 0; i < DArray_end(array); i++) {
            HashmapNode* node = (HashmapNode*) DArray_get(array,i);
            if(!node)
                continue;
            list_t* list = (list_t*)node->data;
            list_t* iter = list;
            printf("   List %s: ", node->key);
            do{
                char* id = (char*) iter->data;
                printf(" %s,", id);
                iter = iter->succ;
            } while(iter != list);
            printf("\n");
        }
    }
}