Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
ElmerCSC
GitHub Repository: ElmerCSC/elmerfem
Path: blob/devel/elmergrid/src/metis-5.1.0/GKlib/gk_mkmemory.h
3206 views
1
/*!
2
\file gk_mkmemory.h
3
\brief Templates for memory allocation routines
4
5
\date Started 3/29/07
6
\author George
7
\version\verbatim $Id: gk_mkmemory.h 10711 2011-08-31 22:23:04Z karypis $ \endverbatim
8
*/
9
10
#ifndef _GK_MKMEMORY_H_
11
#define _GK_MKMEMORY_H_
12
13
14
#define GK_MKALLOC(PRFX, TYPE)\
15
/*************************************************************************/\
16
/*! The macro for gk_?malloc()-class of routines */\
17
/**************************************************************************/\
18
TYPE *PRFX ## malloc(size_t n, char *msg)\
19
{\
20
return (TYPE *)gk_malloc(sizeof(TYPE)*n, msg);\
21
}\
22
\
23
\
24
/*************************************************************************/\
25
/*! The macro for gk_?realloc()-class of routines */\
26
/**************************************************************************/\
27
TYPE *PRFX ## realloc(TYPE *ptr, size_t n, char *msg)\
28
{\
29
return (TYPE *)gk_realloc((void *)ptr, sizeof(TYPE)*n, msg);\
30
}\
31
\
32
\
33
/*************************************************************************/\
34
/*! The macro for gk_?smalloc()-class of routines */\
35
/**************************************************************************/\
36
TYPE *PRFX ## smalloc(size_t n, TYPE ival, char *msg)\
37
{\
38
TYPE *ptr;\
39
\
40
ptr = (TYPE *)gk_malloc(sizeof(TYPE)*n, msg);\
41
if (ptr == NULL) \
42
return NULL; \
43
\
44
return PRFX ## set(n, ival, ptr); \
45
}\
46
\
47
\
48
/*************************************************************************/\
49
/*! The macro for gk_?set()-class of routines */\
50
/*************************************************************************/\
51
TYPE *PRFX ## set(size_t n, TYPE val, TYPE *x)\
52
{\
53
size_t i;\
54
\
55
for (i=0; i<n; i++)\
56
x[i] = val;\
57
\
58
return x;\
59
}\
60
\
61
\
62
/*************************************************************************/\
63
/*! The macro for gk_?set()-class of routines */\
64
/*************************************************************************/\
65
TYPE *PRFX ## copy(size_t n, TYPE *a, TYPE *b)\
66
{\
67
return (TYPE *)memmove((void *)b, (void *)a, sizeof(TYPE)*n);\
68
}\
69
\
70
\
71
/*************************************************************************/\
72
/*! The macro for gk_?AllocMatrix()-class of routines */\
73
/**************************************************************************/\
74
TYPE **PRFX ## AllocMatrix(size_t ndim1, size_t ndim2, TYPE value, char *errmsg)\
75
{\
76
gk_idx_t i, j;\
77
TYPE **matrix;\
78
\
79
matrix = (TYPE **)gk_malloc(ndim1*sizeof(TYPE *), errmsg);\
80
if (matrix == NULL) \
81
return NULL;\
82
\
83
for (i=0; i<ndim1; i++) { \
84
matrix[i] = PRFX ## smalloc(ndim2, value, errmsg);\
85
if (matrix[i] == NULL) { \
86
for (j=0; j<i; j++) \
87
gk_free((void **)&matrix[j], LTERM); \
88
return NULL; \
89
} \
90
}\
91
\
92
return matrix;\
93
}\
94
\
95
\
96
/*************************************************************************/\
97
/*! The macro for gk_?AllocMatrix()-class of routines */\
98
/**************************************************************************/\
99
void PRFX ## FreeMatrix(TYPE ***r_matrix, size_t ndim1, size_t ndim2)\
100
{\
101
gk_idx_t i;\
102
TYPE **matrix;\
103
\
104
if (*r_matrix == NULL) \
105
return; \
106
\
107
matrix = *r_matrix;\
108
\
109
for (i=0; i<ndim1; i++) \
110
gk_free((void **)&(matrix[i]), LTERM);\
111
\
112
gk_free((void **)r_matrix, LTERM);\
113
}\
114
\
115
\
116
/*************************************************************************/\
117
/*! The macro for gk_?SetMatrix()-class of routines */\
118
/**************************************************************************/\
119
void PRFX ## SetMatrix(TYPE **matrix, size_t ndim1, size_t ndim2, TYPE value)\
120
{\
121
gk_idx_t i, j;\
122
\
123
for (i=0; i<ndim1; i++) {\
124
for (j=0; j<ndim2; j++)\
125
matrix[i][j] = value;\
126
}\
127
}\
128
129
130
#define GK_MKALLOC_PROTO(PRFX, TYPE)\
131
TYPE *PRFX ## malloc(size_t n, char *msg);\
132
TYPE *PRFX ## realloc(TYPE *ptr, size_t n, char *msg);\
133
TYPE *PRFX ## smalloc(size_t n, TYPE ival, char *msg);\
134
TYPE *PRFX ## set(size_t n, TYPE val, TYPE *x);\
135
TYPE *PRFX ## copy(size_t n, TYPE *a, TYPE *b);\
136
TYPE **PRFX ## AllocMatrix(size_t ndim1, size_t ndim2, TYPE value, char *errmsg);\
137
void PRFX ## FreeMatrix(TYPE ***r_matrix, size_t ndim1, size_t ndim2);\
138
void PRFX ## SetMatrix(TYPE **matrix, size_t ndim1, size_t ndim2, TYPE value);\
139
140
141
142
#endif
143
144