/* simple matrix operations */ CAMLprim value ml_gsl_linalg_matmult_mod(value A, value omodA, value B, value omodB, value C) { gsl_linalg_matrix_mod_t modA = Opt_arg(omodA, Int_val, GSL_LINALG_MOD_NONE); gsl_linalg_matrix_mod_t modB = Opt_arg(omodB, Int_val, GSL_LINALG_MOD_NONE); _DECLARE_MATRIX3(A, B, C); _CONVERT_MATRIX3(A, B, C); gsl_linalg_matmult_mod(&m_A, modA, &m_B, modB, &m_C); return Val_unit; }
CAMLprim value ml_gsl_histogram_accumulate(value vh, value ow, value x) { gsl_histogram h; double w = Opt_arg(ow, Double_val, 1.); histo_of_val(&h, vh); gsl_histogram_accumulate(&h, Double_val(x), w); return Val_unit; }
CAMLprim value sdl_init(value auto_clean, value vf) { int flags = init_flag_val(vf); int clean = Opt_arg(auto_clean, Bool_val, 0); if (SDL_Init(flags) < 0) raise_with_string(*caml_named_value("SDL_init_exception"), SDL_GetError()); if(clean) atexit(sdl_internal_quit); return Val_unit; }
CAMLprim value mlsdlevent_get(value omask, value num) { int n = Int_val(num); int m; LOCALARRAY(SDL_Event, evt, n); Uint32 mask = Opt_arg(omask, Int_val, SDL_ALLEVENTS); m = SDL_PeepEvents(evt, n, SDL_GETEVENT, mask); if(m < 0) raise_event_exn(SDL_GetError()); { int i; CAMLparam0(); CAMLlocal1(v); v = nil(); for(i=m-1; i>=0; i--){ value e = value_of_SDLEvent(evt[i]); v = mlsdl_cons(e, v); } CAMLreturn(v); } }