# Module Netmcore_matrix

    module Netmcore_matrix: sig .. end

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, 'a) 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, 'a) 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, 'b) 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, 'a) sarray2 -> int -> int -> 'e

`get_c sa k1 k2`: Gets a copy of the `(k1,k2)`-th element of the matrix `sæ`

    val dim : ('a, 'b) sarray2 -> int * int

Returns the dimenstions

    val header : ('a, 'h) sarray2 -> 'h

Returns the header

    val deref : ('e, 'a) sarray2 -> 'e array array

Returns the raw array in shared memory for unprotected access

    val heap : ('a, 'b) sarray2 -> Stdlib.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