CAMLprim value c_arraybandmatrix_copy(value va, value vb, value vsizes) { CAMLparam3(va, vb, vsizes); struct caml_ba_array *ba = ARRAY2_DATA(va); intnat am = ba->dim[0]; int a_smu = Long_val(Field(vsizes, 0)); int b_smu = Long_val(Field(vsizes, 1)); int copymu = Long_val(Field(vsizes, 2)); int copyml = Long_val(Field(vsizes, 3)); #if SUNDIALS_ML_SAFE == 1 intnat an = ba->dim[1]; struct caml_ba_array *bb = ARRAY2_DATA(vb); intnat bm = bb->dim[0]; intnat bn = bb->dim[1]; if (an < copymu + copyml + 1) caml_invalid_argument("ArrayBandMatrix.blit: source matrix too small."); if (bn < copymu + copyml + 1) caml_invalid_argument("ArrayBandMatrix.blit: destination matrix too small."); if ((am != bm) || (bm != bn)) caml_invalid_argument("ArrayBandMatrix.blit: matrix sizes differ."); #endif bandCopy(ARRAY2_ACOLS(va), ARRAY2_ACOLS(vb), am, a_smu, b_smu, copymu, copyml); CAMLreturn (Val_unit); }
void BandCopy(DlsMat A, DlsMat B, long int copymu, long int copyml) { bandCopy(A->cols, B->cols, A->M, A->s_mu, B->s_mu, copymu, copyml); }