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; }
corto_int16 cortotool_language(char *language) { if (!generators) { generators = corto_llNew(); } if (!attributes) { attributes = corto_llNew(); } if (!strcmp(language, "c")) { corto_llAppend(generators, "c_project"); corto_llAppend(generators, "c_type"); corto_llAppend(generators, "c_interface"); corto_llAppend(generators, "c_meta"); corto_llAppend(generators, "c_api"); corto_llAppend(attributes, "c=src"); corto_llAppend(attributes, "h=include"); } else if (!strcmp(language, "cpp")) { corto_llAppend(generators, "cpp_class"); corto_llAppend(generators, "c_type"); corto_llAppend(generators, "c_meta"); corto_llAppend(attributes, "c=src"); corto_llAppend(attributes, "h=include"); } else { corto_error("corto: unknown language '%s'", language); goto error; } return 0; error: return -1; }