CMR  1.3.0
env.h
Go to the documentation of this file.
1 #ifndef CMR_ENV_H
2 #define CMR_ENV_H
3 
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 
16 #include <cmr/config.h>
17 #include <cmr/export.h>
18 #include <stdbool.h>
19 #include <stdlib.h>
20 #include <stdio.h>
21 #include <assert.h>
22 
23 /* Macro for intended non-use of variables. */
24 #define CMR_UNUSED(x) (void)(x)
25 
26 
31 typedef enum
32 {
33  CMR_OKAY = 0,
40 } CMR_ERROR;
41 
46 #define CMR_CALL(call) \
47  do \
48  { \
49  CMR_ERROR _cmr_error = call; \
50  if (_cmr_error) \
51  { \
52  if (_cmr_error == CMR_ERROR_INPUT) \
53  fprintf(stderr, "User input error"); \
54  else if (_cmr_error == CMR_ERROR_MEMORY) \
55  fprintf(stderr, "Memory (re)allocation failed"); \
56  else if (_cmr_error == CMR_ERROR_INVALID) \
57  fprintf(stderr, "Invalid input"); \
58  else if (_cmr_error == CMR_ERROR_TIMEOUT) \
59  fprintf(stderr, "Time limit exceeded"); \
60  else \
61  fprintf(stderr, "Unknown error"); \
62  fprintf(stderr, " in %s:%d.\n", __FILE__, __LINE__); \
63  return _cmr_error; \
64  } \
65  } while (false)
66 
67 struct CMR_ENVIRONMENT;
68 
75 typedef struct CMR_ENVIRONMENT CMR;
76 
83 CMR_EXPORT
85  CMR** pcmr
86 );
87 
92 CMR_EXPORT
94  CMR** pcmr
95 );
96 
104 #define CMRallocBlock(cmr, ptr) \
105  _CMRallocBlock(cmr, (void**) ptr, sizeof(**ptr))
106 
113 CMR_EXPORT
114 CMR_ERROR _CMRallocBlock(CMR* cmr, void** ptr, size_t size);
115 
120 #define CMRfreeBlock(cmr, ptr) \
121  _CMRfreeBlock(cmr, (void**) ptr, sizeof(**ptr))
122 
129 CMR_EXPORT
130 CMR_ERROR _CMRfreeBlock(CMR* cmr, void** ptr, size_t size);
131 
140 #define CMRallocBlockArray(cmr, ptr, length) \
141  _CMRallocBlockArray(cmr, (void**) ptr, sizeof(**ptr), length)
142 
149 CMR_EXPORT
150 CMR_ERROR _CMRallocBlockArray(CMR* cmr, void** ptr, size_t size, size_t length);
151 
159 #define CMRreallocBlockArray(cmr, ptr, length) \
160  _CMRreallocBlockArray(cmr, (void**) ptr, sizeof(**ptr), length)
161 
168 CMR_EXPORT
169 CMR_ERROR _CMRreallocBlockArray(CMR* cmr, void** ptr, size_t size, size_t length);
170 
179 #define CMRduplicateBlockArray(cmr, ptr, length, source) \
180  _CMRduplicateBlockArray(cmr, (void**) ptr, sizeof(**ptr), length, source)
181 
188 CMR_EXPORT
189 CMR_ERROR _CMRduplicateBlockArray(CMR* cmr, void** ptr, size_t size, size_t length, void* source);
190 
197 #define CMRfreeBlockArray(cmr, ptr) \
198  _CMRfreeBlockArray(cmr, (void**) ptr)
199 
200 CMR_EXPORT
201 CMR_ERROR _CMRfreeBlockArray(CMR* cmr, void** ptr);
202 
207 CMR_EXPORT
208 char* CMRgetErrorMessage(
209  CMR* cmr
210 );
211 
216 CMR_EXPORT
218  CMR* cmr
219 );
220 
221 
222 #ifdef __cplusplus
223 }
224 #endif
225 
226 #endif /* CMR_ENV_H */
227 
CMR_EXPORT CMR_ERROR _CMRfreeBlock(CMR *cmr, void **ptr, size_t size)
Carries out the deallocation for CMRfreeBlock.
Definition: env.c:94
CMR_EXPORT CMR_ERROR CMRfreeEnvironment(CMR **pcmr)
Frees a CMR environment.
Definition: env.c:60
CMR_EXPORT void CMRclearErrorMessage(CMR *cmr)
Clears the error message.
Definition: env.c:403
CMR_EXPORT char * CMRgetErrorMessage(CMR *cmr)
Returns the error message (or NULL if no error with a message occured).
Definition: env.c:398
CMR_EXPORT CMR_ERROR _CMRreallocBlockArray(CMR *cmr, void **ptr, size_t size, size_t length)
Carries out the reallocation for CMRreallocBlockArray.
Definition: env.c:121
CMR_EXPORT CMR_ERROR _CMRallocBlock(CMR *cmr, void **ptr, size_t size)
Carries out the allocation for CMRallocBlock.
Definition: env.c:82
CMR_EXPORT CMR_ERROR _CMRallocBlockArray(CMR *cmr, void **ptr, size_t size, size_t length)
Carries out the allocation for CMRallocBlockArray.
Definition: env.c:108
CMR_EXPORT CMR_ERROR CMRcreateEnvironment(CMR **pcmr)
Allocates and initializes a default CMR environment.
Definition: env.c:20
CMR_ERROR
Type for return codes of library functions.
Definition: env.h:32
@ CMR_ERROR_OVERFLOW
Definition: env.h:38
@ CMR_ERROR_TIMEOUT
Definition: env.h:39
@ CMR_ERROR_MEMORY
Definition: env.h:36
@ CMR_ERROR_INVALID
Definition: env.h:37
@ CMR_OKAY
Definition: env.h:33
@ CMR_ERROR_INPUT
Definition: env.h:34
@ CMR_ERROR_OUTPUT
Definition: env.h:35
CMR_EXPORT CMR_ERROR _CMRduplicateBlockArray(CMR *cmr, void **ptr, size_t size, size_t length, void *source)
Carries out the duplication for CMRduplicateBlockArray.
Definition: env.c:132
CMR_EXPORT CMR_ERROR _CMRfreeBlockArray(CMR *cmr, void **ptr)
Definition: env.c:146
Definition: env_internal.h:45