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; }
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; }
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; }
/* 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); }