(* $Id: netmcore_matrix.mli 1580 2011-04-14 16:06:32Z gerd $ *)
(** Shared 2-dimensional arrays (matrices) *)
type ('e,'h) sarray2
(** Arrays where the elements have type ['e] and the header has
type ['h]
*)
type ('e,'h) sarray2_descr
(** The marshallable descriptor of a shared matrix *)
val create : Netmcore.res_id -> int -> 'e array array -> 'h -> ('e,'h) sarray2
(** [create pool_id n2 a h]:
Creates a matrix by deeply copying a normal array [a]
and using the copy of [h] as header. In [n2] one has
to pass the second dimension.
*)
val make : Netmcore.res_id -> int -> int -> 'e -> 'h -> ('e,'h) sarray2
(** [make pool_id n1 n2 x h]:
Creates a matrix of the passed number of elements (n1 * n2),
copies the element [x], and initializes each element of the new array
with the single copy of [x]. The value [h] is copied and used
as header.
*)
val init : Netmcore.res_id -> int -> int -> (int -> int -> 'e) -> 'h ->
('e,'h) sarray2
(** [init pool_id n1 n2 f h]:
Creates a matrix of the passed number of elements (n1 * n2),
and for getting the element at position [k] the function
[f k] is run, and the copy of the result is written to the
position. The header is set to the copy of [h].
*)
val set : ('e,_) sarray2 -> int -> int -> 'e -> unit
(** [set sa k1 k2 x]: Sets the [(k1,k2)-th] element of the matrix [sa] to a
deep copy of [x].
*)
val get_ro : ('e,_) sarray2 -> int -> int -> 'e
(** [get_ro sa k1 k2]: Gets the [(k1,k2)]-th element of the matrix [sa].
Note that there is no guarantee that this value still exists if
it is returned, and a parallely running [set] changes this element.
If such values are accessed the program may crash!
*)
val get_p : ('e,_) sarray2 -> int -> int -> ('e -> 'a) -> 'a
(** [get_p sa k1 k2 f]: Gets the [(k1,k2)]-th element of the matrix [sa]
and call [f] with this element, and returns the result of [f].
During the execution of [f] the requested element cannot be
garbage collected.
*)
val get_c : ('e,_) sarray2 -> int -> int -> 'e
(** [get_c sa k1 k2]: Gets a copy of the [(k1,k2)]-th element of the matrix
[sæ]
*)
val dim : (_,_) sarray2 -> int * int
(** Returns the dimenstions *)
val header : (_,'h) sarray2 -> 'h
(** Returns the header *)
val deref : ('e,_) sarray2 -> 'e array array
(** Returns the raw array in shared memory for unprotected access *)
val heap : (_,_) sarray2 -> Obj.t Netmcore_heap.heap
(** Return the backing heap structure *)
val descr_of_sarray2 : ('e,'h) sarray2 -> ('e,'h) sarray2_descr
(** Returns the descriptor *)
val sarray2_of_descr :
Netmcore.res_id -> ('e,'h) sarray2_descr -> ('e,'h) sarray2
(** Look up the matrix for this descriptor *)