modelica_metatype arrayCopy(modelica_metatype arr) { int nelts = MMC_HDRSLOTS(MMC_GETHDR(arr)); void* res = (struct mmc_struct*)mmc_mk_box_no_assign(nelts, MMC_ARRAY_TAG); void **arrp = MMC_STRUCTDATA(arr); void **resp = MMC_STRUCTDATA(res); memcpy(resp, arrp, sizeof(modelica_metatype)*nelts); return res; }
modelica_metatype listArray(modelica_metatype lst) { int nelts = listLength(lst); void* arr = (struct mmc_struct*)mmc_mk_box_no_assign(nelts, MMC_ARRAY_TAG); void **arrp = MMC_STRUCTDATA(arr); int i = 0; for(i=0; i<nelts; i++) { arrp[i] = MMC_CAR(lst); lst = MMC_CDR(lst); } return arr; }
modelica_metatype arrayCopy(modelica_metatype arr) { int nelts = MMC_HDRSLOTS(MMC_GETHDR(arr)); void* res = (struct mmc_struct*)mmc_mk_box_no_assign(nelts, MMC_ARRAY_TAG); void **arrp = MMC_STRUCTDATA(arr); void **resp = MMC_STRUCTDATA(res); int i = 0; for(i=0; i<nelts; i++) { resp[i] = arrp[i]; } return res; }
modelica_metatype arrayAppend(modelica_metatype arr1, modelica_metatype arr2) { int nelts1 = MMC_HDRSLOTS(MMC_GETHDR(arr1)); int nelts2 = MMC_HDRSLOTS(MMC_GETHDR(arr2)); void* res = (struct mmc_struct*)mmc_mk_box_no_assign(nelts1 + nelts2, MMC_ARRAY_TAG); void **arr1p = MMC_STRUCTDATA(arr1); void **arr2p = MMC_STRUCTDATA(arr2); void **resp = MMC_STRUCTDATA(res); int i; for (i=0; i<nelts1; ++i) { resp[i] = arr1p[i]; } for (i=0; i<nelts2; ++i) { resp[i+nelts1] = arr2p[i]; } return res; }