Pristine Start using Luke's original CLS 1.0 alpha 1
[CommonLispStat.git] / lib / linalgdata.c
blobf81f25bda1d4f04bb4989ebdc832180259c54cbc
1 /* linalgdata - allocation support for basic linear algebra routines. */
2 /* Copyright (c) 1990, by Luke Tierney */
4 #include "linalg.h"
6 #ifdef INTPTR
7 typedef int PTR;
8 #else
9 typedef char *PTR;
10 #endif
12 extern PTR la_allocate();
14 /************************************************************************/
15 /** **/
16 /** Storage Allocation Functions **/
17 /** **/
18 /************************************************************************/
20 static char *allocate(n, m)
21 unsigned n, m;
23 char *p = (char *) la_allocate(n, m);
24 if (p == nil) xlfail("allocation failed");
25 return(p);
28 static free_alloc(p)
29 char *p;
31 if (p != nil) la_free_alloc((PTR) p);
34 IVector ivector(n)
35 unsigned n;
37 return((IVector) allocate(n, sizeof(int)));
40 RVector rvector(n)
41 unsigned n;
43 return((RVector) allocate(n, sizeof(double)));
46 CVector cvector(n)
47 unsigned n;
49 return((CVector) allocate(n, sizeof(Complex)));
52 free_vector(v) Vector v; { free_alloc(v); }
54 IMatrix imatrix(n, m)
55 unsigned n, m;
57 int i;
58 IMatrix mat = (IMatrix) allocate(n, sizeof(IVector));
59 for (i = 0; i < n; i++) mat[i] = (IVector) allocate(m, sizeof(int));
60 return(mat);
63 RMatrix rmatrix(n, m)
64 unsigned n, m;
66 int i;
67 RMatrix mat = (RMatrix) allocate(n, sizeof(RVector));
68 for (i = 0; i < n; i++) mat[i] = (RVector) allocate(m, sizeof(double));
69 return(mat);
72 CMatrix cmatrix(n, m)
73 unsigned n, m;
75 int i;
76 CMatrix mat = (CMatrix) allocate(n, sizeof(CVector));
77 for (i = 0; i < n; i++) mat[i] = (CVector) allocate(m, sizeof(Complex));
78 return(mat);
81 free_matrix(mat, n)
82 Matrix mat;
83 int n;
85 int i;
87 if (mat != nil) for (i = 0; i < n; i++) free_alloc(mat[i]);
88 free_alloc(mat);