コード例 #1
0
ファイル: string_deser.c プロジェクト: hendrenja/corto
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;
}
コード例 #2
0
ファイル: json_deser.c プロジェクト: cortoproject/json
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;
}
コード例 #3
0
ファイル: string.c プロジェクト: rfloresx/corto
char *strappend(char *src, char *fmt, ...) {
    char buff[1024];
    va_list args;
    unsigned int sourceLength = 0;

    va_start(args, fmt);
    vsprintf(buff, fmt, args);
    va_end(args);

    if (src) {
        sourceLength = strlen(src);
    }

    src = corto_realloc(src, sourceLength + strlen(buff) + 1);
    strcpy(&src[sourceLength], buff);

    return src;
}
コード例 #4
0
ファイル: bitmask.c プロジェクト: cortoproject/corto
/* This is a managed file. Do not delete this comment. */

#include <corto>

#include "bitmask.h"

corto_int16 corto__bitmask_bindConstant(corto_bitmask this, corto_constant* c) {
    if (corto_check_state(corto_type_o, CORTO_VALID)) {
        *c = 0x1 << (corto_scope_size(this) - 1);
    }
    corto_enum(this)->constants.buffer = corto_realloc(corto_enum(this)->constants.buffer, (corto_enum(this)->constants.length+1) * sizeof(corto_constant*));
    corto_enum(this)->constants.buffer[corto_enum(this)->constants.length] = c;
    corto_enum(this)->constants.length++;

    corto_claim(c);

    return 0;
}

int16_t corto_bitmask_init(
    corto_bitmask this)
{
    corto_primitive(this)->kind = CORTO_BITMASK;
    corto_primitive(this)->width = CORTO_WIDTH_32;
    return corto_primitive_init((corto_primitive)this);
}