Example #1
0
void* corto_string_deserAllocElem(void *ptr, corto_string_deser_t *data) {
    corto_collection t = corto_collection(data->allocUdata);
    corto_int32 size = corto_type_sizeof(t->elementType);
    void *result = NULL;

    if (ptr) {
        switch(t->kind) {
        case CORTO_SEQUENCE: {
            corto_objectseq *seq = ptr; /* Use random built-in sequence type */
            seq->buffer = corto_realloc(seq->buffer, (data->current + 1) * size);
            seq->length = data->current + 1;
            ptr = seq->buffer;
            memset(CORTO_OFFSET(ptr, size * data->current), 0, size);
        }
        case CORTO_ARRAY:
            result = CORTO_OFFSET(ptr, size * data->current);
            break;
        case CORTO_LIST: {
            corto_ll list = *(corto_ll*)ptr;
            if (corto_collection_requiresAlloc(t->elementType)) {
                result = corto_calloc(size);
                corto_ll_append(list, result);
            } else {
                corto_ll_append(list, NULL);
                result = corto_ll_getPtr(list, corto_ll_size(list) - 1);
            }
            break;
        default:
            break;
        }
        }
    }

    return result;
}
Example #2
0
void* json_deser_allocElem(void *ptr, corto_collection t, corto_int32 i)
{
    corto_int32 size = corto_type_sizeof(t->elementType);
    void *result = NULL;

    switch(t->kind) {
    case CORTO_SEQUENCE: {
        corto_objectseq *seq = ptr; /* Use random built-in sequence type */
        seq->buffer = corto_realloc(seq->buffer, (i + 1) * size);
        seq->length = i + 1;
        ptr = seq->buffer;
        memset(CORTO_OFFSET(ptr, size * i), 0, size);
    }
    case CORTO_ARRAY:
        result = CORTO_OFFSET(ptr, size * i);
        break;
    case CORTO_LIST: {
        corto_ll list = *(corto_ll*)ptr;
        if (corto_collection_requiresAlloc(t->elementType)) {
            result = corto_calloc(size);
            corto_llAppend(list, result);
        } else {
            corto_llAppend(list, NULL);
            result = corto_llGetPtr(list, corto_llSize(list) - 1);
        }
        break;
    default:
        break;
    }
    }

    return result;
}
Example #3
0
static corto_equalityKind corto_collection_compareListWithList(corto_collection t, corto_ll list1, corto_ll list2) {
    corto_equalityKind result = CORTO_EQ;
    corto_iter iter1, iter2;
    void *e1, *e2;
    corto_type elementType = t->elementType;

    iter1 = corto_ll_iter(list1);
    iter2 = corto_ll_iter(list2);
    while(corto_iter_hasNext(&iter1) && corto_iter_hasNext(&iter2)) {
        if (corto_collection_requiresAlloc(elementType)) {
            e1 = corto_iter_next(&iter1);
            e2 = corto_iter_next(&iter2);
        } else {
            e1 = corto_iter_nextPtr(&iter1);
            e2 = corto_iter_nextPtr(&iter2);
        }
        result = corto_ptr_compare(e1, elementType, e2);
        if (result != CORTO_EQ) {
            break;
        }
    }

    return result;
}
Example #4
0
static corto_equalityKind corto_collection_compareArrayWithList(corto_collection t, void *array, corto_uint32 elementSize, corto_ll list) {
    corto_equalityKind result = CORTO_EQ;
    corto_uint32 i=0;
    corto_iter iter;
    void *e1, *e2;
    corto_type elementType = t->elementType;

    iter = corto_ll_iter(list);
    while(corto_iter_hasNext(&iter)) {
        if (corto_collection_requiresAlloc(elementType)) {
            e1 = corto_iter_next(&iter);
        } else {
            e1 = corto_iter_nextPtr(&iter);
        }
        e2 = CORTO_OFFSET(array, elementSize * i);
        result = corto_ptr_compare(e2, elementType, e1);
        if (result != CORTO_EQ) {
            break;
        }
        i++;
    }

    return result;
}