diff options
author | Xavier Leroy <xavier.leroy@inria.fr> | 2002-04-15 11:23:28 +0000 |
---|---|---|
committer | Xavier Leroy <xavier.leroy@inria.fr> | 2002-04-15 11:23:28 +0000 |
commit | 2ed36730d100d93031678e7e513532b97459ffd4 (patch) | |
tree | 133df9254b602904f290e72bba489fd2f73c700b /otherlibs | |
parent | 08968d669c80f970a6b906ed17e2a53025068822 (diff) |
Ajout fonctions kind et layout (PR#1055)
git-svn-id: http://caml.inria.fr/svn/ocaml/trunk@4651 f963ae5c-01c2-4b8c-9fe0-0dff7051ff02
Diffstat (limited to 'otherlibs')
-rw-r--r-- | otherlibs/bigarray/bigarray.ml | 9 | ||||
-rw-r--r-- | otherlibs/bigarray/bigarray.mli | 24 | ||||
-rw-r--r-- | otherlibs/bigarray/bigarray_stubs.c | 14 |
3 files changed, 47 insertions, 0 deletions
diff --git a/otherlibs/bigarray/bigarray.ml b/otherlibs/bigarray/bigarray.ml index 1e871da57..ab3ea10bd 100644 --- a/otherlibs/bigarray/bigarray.ml +++ b/otherlibs/bigarray/bigarray.ml @@ -72,6 +72,9 @@ module Genarray = struct = "bigarray_set_generic" external num_dims: ('a, 'b, 'c) t -> int = "bigarray_num_dims" external nth_dim: ('a, 'b, 'c) t -> int -> int = "bigarray_dim" + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" + external sub_left: ('a, 'b, c_layout) t -> int -> int -> ('a, 'b, c_layout) t = "bigarray_sub" external sub_right: ('a, 'b, fortran_layout) t -> int -> int -> @@ -98,6 +101,8 @@ module Array1 = struct external get: ('a, 'b, 'c) t -> int -> 'a = "%bigarray_ref_1" external set: ('a, 'b, 'c) t -> int -> 'a -> unit = "%bigarray_set_1" let dim a = Genarray.nth_dim a 0 + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" external sub: ('a, 'b, 'c) t -> int -> int -> ('a, 'b, 'c) t = "bigarray_sub" external blit: ('a, 'b, 'c) t -> ('a, 'b, 'c) t -> unit = "bigarray_blit" external fill: ('a, 'b, 'c) t -> 'a -> unit = "bigarray_fill" @@ -118,6 +123,8 @@ module Array2 = struct external set: ('a, 'b, 'c) t -> int -> int -> 'a -> unit = "%bigarray_set_2" let dim1 a = Genarray.nth_dim a 0 let dim2 a = Genarray.nth_dim a 1 + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" external sub_left: ('a, 'b, c_layout) t -> int -> int -> ('a, 'b, c_layout) t = "bigarray_sub" external sub_right: ('a, 'b, fortran_layout) t -> int -> int -> ('a, 'b, fortran_layout) t = "bigarray_sub" let slice_left a n = Genarray.slice_left a [|n|] @@ -151,6 +158,8 @@ module Array3 = struct let dim1 a = Genarray.nth_dim a 0 let dim2 a = Genarray.nth_dim a 1 let dim3 a = Genarray.nth_dim a 2 + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" external sub_left: ('a, 'b, c_layout) t -> int -> int -> ('a, 'b, c_layout) t = "bigarray_sub" external sub_right: ('a, 'b, fortran_layout) t -> int -> int -> ('a, 'b, fortran_layout) t = "bigarray_sub" let slice_left_1 a n m = Genarray.slice_left a [|n; m|] diff --git a/otherlibs/bigarray/bigarray.mli b/otherlibs/bigarray/bigarray.mli index 6e9b047d0..77dfe5192 100644 --- a/otherlibs/bigarray/bigarray.mli +++ b/otherlibs/bigarray/bigarray.mli @@ -242,6 +242,12 @@ module Genarray : Raise [Invalid_arg] if [n] is less than 0 or greater or equal than [Genarray.num_dims a]. *) + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + (** Return the kind of the given big array. *) + + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" + (** Return the layout of the given big array. *) + external get: ('a, 'b, 'c) t -> int array -> 'a = "bigarray_get_generic" (** Read an element of a generic big array. [Genarray.get a [|i1; ...; iN|]] returns the element of [a] @@ -431,6 +437,12 @@ module Array1 : sig (** Return the size (dimension) of the given one-dimensional big array. *) + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + (** Return the kind of the given big array. *) + + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" + (** Return the layout of the given big array. *) + external get: ('a, 'b, 'c) t -> int -> 'a = "%bigarray_ref_1" (** [Array1.get a x], or alternatively [a.{x}], returns the element of [a] at index [x]. @@ -494,6 +506,12 @@ module Array2 : val dim2: ('a, 'b, 'c) t -> int (** Return the second dimension of the given two-dimensional big array. *) + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + (** Return the kind of the given big array. *) + + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" + (** Return the layout of the given big array. *) + external get: ('a, 'b, 'c) t -> int -> int -> 'a = "%bigarray_ref_2" (** [Array2.get a x y], also written [a.{x,y}], returns the element of [a] at coordinates ([x], [y]). @@ -583,6 +601,12 @@ module Array3 : val dim3: ('a, 'b, 'c) t -> int (** Return the third dimension of the given three-dimensional big array. *) + external kind: ('a, 'b, 'c) t -> ('a, 'b) kind = "bigarray_kind" + (** Return the kind of the given big array. *) + + external layout: ('a, 'b, 'c) t -> 'c layout = "bigarray_layout" + (** Return the layout of the given big array. *) + external get: ('a, 'b, 'c) t -> int -> int -> int -> 'a = "%bigarray_ref_3" (** [Array3.get a x y z], also written [a.{x,y,z}], returns the element of [a] at coordinates ([x], [y], [z]). diff --git a/otherlibs/bigarray/bigarray_stubs.c b/otherlibs/bigarray/bigarray_stubs.c index b0feb4db3..30fa1a249 100644 --- a/otherlibs/bigarray/bigarray_stubs.c +++ b/otherlibs/bigarray/bigarray_stubs.c @@ -415,6 +415,20 @@ CAMLprim value bigarray_dim(value vb, value vn) return Val_long(b->dim[n]); } +/* Return the kind of a big array */ + +CAMLprim value bigarray_kind(value vb) +{ + return Val_int(Bigarray_val(vb)->flags & BIGARRAY_KIND_MASK); +} + +/* Return the layout of a big array */ + +CAMLprim value bigarray_layout(value vb) +{ + return Val_int(Bigarray_val(vb)->flags & BIGARRAY_LAYOUT_MASK); +} + /* Finalization of a big array */ static void bigarray_finalize(value v) |