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; }
int testMain(int argc, char* argv[]) { /* $begin(main) */ int result = 0; test_Runner runner = test_RunnerCreate("corto/md", argv[0], (argc > 1) ? argv[1] : NULL); if (!runner) return -1; if (corto_llSize(runner->failures)) { result = -1; } corto_delete(runner); return result; /* $end */ }
/* Reverse list */ void corto_llReverse(corto_ll list) { corto_uint32 i, size = corto_llSize(list); corto_llNode start = list->first; corto_llNode end = list->last; corto_llNode ptr; for(i=0; i<size / 2; i++) { void *tmp = start->data; start->data = end->data; end->data = tmp; start = start->next; /* Do in-place reverse, find node that precedes 'end' */ if (start != end) { ptr = start; while(ptr && (ptr->next != end)) { ptr = ptr->next; } corto_assert(ptr != NULL, "linked list corrupt"); end = ptr; } } }