alloc.h

Go to the documentation of this file.
00001 /*  _________________________________________________________________________
00002  *
00003  *  UTILIB: A utility library for developing portable C++ codes.
00004  *  Copyright (c) 2001, Sandia National Laboratories.
00005  *  This software is distributed under the GNU Lesser General Public License.
00006  *  For more information, see the README file in the top UTILIB directory.
00007  *  _________________________________________________________________________
00008  */
00009 
00023 #if defined(__cplusplus) && defined(ANSI_HDRS)
00024 #include <cstdio>
00025 #include <cstdlib>
00026 #else
00027 #include <stdio.h>
00028 #include <stdlib.h>
00029 #endif
00030 #include "_generic.h"
00031 
00032 
00033 
00034 /* vector\matrix allocate statements */
00035 
00036 /*
00037 #define vector(nl,nh)                   dvector(nl,nh)
00038 #define matrix(nrl,nrh,ncl,nch)         dmatrix(nrl,nrh,ncl,nch)
00039 #define array(nrl,nrh,ncl,nch,nzl,nzh)  darray(nrl,nrh,ncl,nch,nzl,nzh)
00040 */
00041 
00042 #define fvector(nl, nh) \
00043                 (float *) generic_make_vector(nl,nh,sizeof(float))
00044 #define ivector(nl, nh) \
00045                 (int *) generic_make_vector(nl,nh,sizeof(int))
00046 #define dvector(nl, nh) \
00047                 (double *) generic_make_vector(nl,nh,sizeof(double))
00048 #define fmatrix(nrl, nrh, ncl, nch) \
00049                 (float **) generic_make_matrix(nrl,nrh,ncl,nch,sizeof(float))
00050 #define imatrix(nrl, nrh, ncl, nch) \
00051                 (int **) generic_make_matrix(nrl,nrh,ncl,nch,sizeof(int))
00052 #define dmatrix(nrl, nrh, ncl, nch) \
00053                 (double **) generic_make_matrix(nrl,nrh,ncl,nch,sizeof(double))
00054 #define farray(nrl, nrh, ncl, nch, nzl, nzh) \
00055                 (float ***) generic_make_array(nrl,nrh,ncl,nch,nzl,nzh, \
00056                                                         sizeof(float))
00057 #define iarray(nrl, nrh, ncl, nch, nzl, nzh) \
00058                 (int ***) generic_make_array(nrl,nrh,ncl,nch,nzl,nzh, \
00059                                                         sizeof(int))
00060 #define darray(nrl, nrh, ncl, nch, nzl, nzh) \
00061                 (double ***) generic_make_array(nrl,nrh,ncl,nch,nzl,nzh, \
00062                                                         sizeof(double))
00063 
00064 
00065 /* vector\matrix free statements */
00066 
00067 /*
00068 #define free_vector(v,nl,nh)                    free_dvector(v,nl,nh)
00069 #define free_matrix(v,nrl,nrh,ncl,nch)          free_dmatrix(v,nrl,nrh,ncl,nch)
00070 #define free_array(v,nrl,nrh,ncl,nch,nzl,nzh)   free_darray(v,nrl,nrh,ncl,nch,nzl,nzh)
00071 */
00072 
00073 #define free_fvector(v, nl, nh) \
00074                 generic_free_vector((VOID *) v,nl,nh,sizeof(float))
00075 #define free_ivector(v, nl, nh) \
00076                 generic_free_vector((VOID *) v,nl,nh,sizeof(int))
00077 #define free_dvector(v, nl, nh) \
00078                 generic_free_vector((VOID *) v,nl,nh,sizeof(double))
00079 #define free_fmatrix(v, nrl, nrh, ncl, nch) \
00080                 generic_free_matrix((VOID **) v,nrl,nrh, ncl, nch,sizeof(float))
00081 #define free_imatrix(v, nrl, nrh, ncl, nch) \
00082                 generic_free_matrix((VOID **) v,nrl,nrh, ncl, nch,sizeof(int))
00083 #define free_dmatrix(v, nrl, nrh, ncl, nch) \
00084                 generic_free_matrix((VOID **) v,nrl,nrh,ncl, nch,sizeof(double))
00085 #define free_farray(v, nrl, nrh, ncl, nch, nzl, nzh) \
00086                 generic_free_array((VOID ***) v,nrl,nrh, ncl, nch,nzl,nzh,\
00087                                                 sizeof(float))
00088 #define free_iarray(v, nrl, nrh, ncl, nch, nzl, nzh) \
00089                 generic_free_array((VOID ***) v,nrl,nrh, ncl, nch,nzl,nzh,\
00090                                                 sizeof(int))
00091 #define free_darray(v, nrl, nrh, ncl, nch, nzl, nzh) \
00092                 generic_free_array((VOID ***) v,nrl,nrh, ncl,nch,nzl,nzh,\
00093                                                 sizeof(double))
00094 
00095 
00096 /* matrix transpose statements */
00097 
00098 #define transpose_fmatrix(m, nrl, nrh, ncl, nch) \
00099         (float **) generic_transpose_matrix((VOID **) m,nrl,nrh, ncl, nch,\
00100                                 sizeof(float))
00101 #define transpose_imatrix(m, nrl, nrh, ncl, nch) \
00102         (int **) generic_transpose_matrix((VOID **) m,nrl,nrh, ncl, nch,\
00103                                 sizeof(int))
00104 #define transpose_dmatrix(m, nrl, nrh, ncl, nch) \
00105         (double **) generic_transpose_matrix((VOID **)m,nrl,nrh, ncl, nch,\
00106                                 sizeof(double))
00107 
00108 
00109 
00112 #if defined(__cplusplus)
00113 extern "C" {
00114 #endif
00115 #if defined(__STDC__) || defined(__cplusplus)
00116 VOID    *generic_make_vector(int nl, int nh, unsigned size);
00117 VOID    **generic_make_matrix(int nrl, int nrh, int ncl, int nch, 
00118                         unsigned size);
00119 VOID    ***generic_make_array(int nrl, int nrh, int ncl, int nch, int nzl, 
00120                         int nzh, unsigned size);
00121 void    generic_free_vector(char* v, int nl, int nh, unsigned size);
00122 void    generic_free_matrix(char** v, int nrl, int nrh, int ncl, int nch, 
00123                         unsigned size);
00124 void    generic_free_array(char*** v, int nrl, int nrh, int ncl, int nch, 
00125                         int nzl, unsigned size);
00126 VOID    **generic_transpose_matrix(VOID **matrix, int nrl, int nrh, int ncl, 
00127                         int nch, unsigned size);
00128 int print_ivector(int* v, int nl, int nh, FILE* fp);
00129 int print_fvector(float* v, int nl, int nh, FILE* fp);
00130 int print_dvector(double* v, int nl, int nh, FILE* fp);
00131 int print_imatrix(int** v, int nrl, int nrh, int ncl, int nch, FILE* fp);
00132 int print_fmatrix(float** v, int nrl, int nrh, int ncl, int nch, FILE* fp);
00133 int print_dmatrix(double** v, int nrl, int nrh, int ncl, int nch, FILE* fp);
00134 int print_farray(float*** v, int nrl, int nrh, int ncl, int nch, int nzl,
00135                                                 int nzh, FILE* fp);
00136 int read_ivector(int* v, int nl, int nh, FILE* fp);
00137 int read_dvector(double* v, int nl, int nh, FILE* fp);
00138 int read_fvector(float* v, int nl, int nh, FILE* fp);
00139 int read_dmatrix(double** v, int nrl, int nrh, int ncl, int nch, FILE* fp);
00140 #else
00141 extern VOID     *generic_make_vector();
00142 extern VOID     **generic_make_matrix();
00143 extern VOID     ***generic_make_array();
00144 extern void     generic_free_vector();
00145 extern void     generic_free_matrix();
00146 extern void     generic_free_array();
00147 extern VOID     **generic_transpose_matrix();
00148 extern int      print_ivector();
00149 extern int      print_fvector();
00150 extern int      print_dvector();
00151 extern int      print_imatrix();
00152 extern int      print_fmatrix();
00153 extern int      print_dmatrix();
00154 extern int      print_farray();
00155 extern int      read_ivector();
00156 extern int      read_dvector();
00157 extern int      read_fvector();
00158 extern int      read_dmatrix();
00159 #endif
00160 #ifdef __cplusplus
00161 };
00162 #endif
00163 
00164 #ifndef __cplusplus
00165 #define new(type)               (type *) malloc((size_t) sizeof( type ))
00166 #define new_array(type, n)      (type*) malloc((size_t) sizeof(type)*n)
00167 #endif
00168 
00169