The following description is also available in the source code (wv_matalloc.c):

```
void *wv_matalloc (size_t size, void *data, int ndim, ...)
void *wv_matallocv (size_t size, void *data, int ndim, unsigned int*dims)
allocates memory and builds pointerstructure for
ndim dimensional matrix.
Note: wv_matalloc is thread safe I think.
size: size in bytes of matrix elements to be allocated
data: if (void *)0: wv_matalloc allocates memory
else it is assumed data is already allocated
ndim: number of dimensions of matrix to allocate
... : dimensions of the matrix to be allocated of type unsigned int
dims: dimensions of matrix to be allocated
return value: pointer to pointerstructure to access arrayelements
(void *)0 if something wrong with parameters or
if malloc doesn't work
example:
allocate 2-dimensional matrix, elements of type double,
dimensions M and N:
double **a;
a=wv_matalloc(sizeof(double),(void *)0,2,M,N);
usage of a is then like: a[i][j] = 3;
allocate 4-dimensional matrix, elements of type int,
dimensions m,n,p,q:
int ****a;
m=8; n=123; p=9; q=11;
a=wv_matalloc(sizeof(int),(void *)0,4,m,n,p,q);
a[i][j][k][l] = 12;
3-dimensional matrix, elements of type double,
dimensions l,m,n. Space for data is already allocated,
so in fact, only the pointer structure is set up:
double *a;
double ***x;
a=(double *) malloc(sizeof(double)*l*m*n);
a allocated outside wv_matalloc
x=wv_matalloc(sizeof(double),a,3,l,m,n);
x[0][0][0] is the same element as a[0]
void wv_matfree(void *p)
Frees memory occupied by pointers and perhaps data allocated by
wv_matalloc. Only the space allocated by wv_matalloc is freed.
p: returnvalue of wv_matalloc
example
char ***a;
a=wv_matalloc(sizeof(char),(void *)0,3,10,20,15);
wv_matfree(a);
```