File: combi.ml

package info (click to toggle)
ocamlgsl 1.24.3-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, bullseye
  • size: 1,244 kB
  • sloc: ml: 8,748; ansic: 7,395; makefile: 37
file content (31 lines) | stat: -rw-r--r-- 718 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
open Bigarray

let () = Error.init ()

type t = {
  n    : int;
  k    : int;
  data : (int, int_elt, c_layout) Bigarray.Array1.t
}

external _init_first : t -> unit = "ml_gsl_combination_init_first"
external _init_last  : t -> unit = "ml_gsl_combination_init_last"

let make n k =
  let c = { n; k; data = Array1.create int c_layout k } in begin
    _init_first c;
    c
  end

let to_array { data; _ } =
  let len = Array1.dim data in
  Array.init len (Array1.get data)

external prev : t -> unit = "ml_gsl_combination_prev"
external next : t -> unit = "ml_gsl_combination_next"

external _valid : t -> bool = "ml_gsl_combination_valid"

let valid c =
  try _valid c
  with Error.Gsl_exn (Error.FAILURE, _) -> false