summaryrefslogtreecommitdiffstats
path: root/otherlibs
diff options
context:
space:
mode:
authorXavier Leroy <xavier.leroy@inria.fr>2002-04-15 11:23:28 +0000
committerXavier Leroy <xavier.leroy@inria.fr>2002-04-15 11:23:28 +0000
commit2ed36730d100d93031678e7e513532b97459ffd4 (patch)
tree133df9254b602904f290e72bba489fd2f73c700b /otherlibs
parent08968d669c80f970a6b906ed17e2a53025068822 (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.ml9
-rw-r--r--otherlibs/bigarray/bigarray.mli24
-rw-r--r--otherlibs/bigarray/bigarray_stubs.c14
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)