CMR  1.3.0
Loading...
Searching...
No Matches
env.h
Go to the documentation of this file.
1#ifndef CMR_ENV_H
2#define CMR_ENV_H
3
12#ifdef __cplusplus
13extern "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
44
49#define CMR_CALL(call) \
50 do \
51 { \
52 CMR_ERROR _cmr_error = call; \
53 if (_cmr_error) \
54 { \
55 if (_cmr_error == CMR_ERROR_INPUT) \
56 fprintf(stderr, "User input error"); \
57 else if (_cmr_error == CMR_ERROR_OUTPUT) \
58 fprintf(stderr, "Error when writing user output"); \
59 else if (_cmr_error == CMR_ERROR_MEMORY) \
60 fprintf(stderr, "Memory (re)allocation failed"); \
61 else if (_cmr_error == CMR_ERROR_INVALID) \
62 fprintf(stderr, "Invalid input"); \
63 else if (_cmr_error == CMR_ERROR_TIMEOUT) \
64 fprintf(stderr, "Time limit exceeded"); \
65 else if (_cmr_error == CMR_ERROR_OVERFLOW) \
66 fprintf(stderr, "Integer overflow"); \
67 else if (_cmr_error == CMR_ERROR_STRUCTURE) \
68 fprintf(stderr, "Invalid matrix structure"); \
69 else if (_cmr_error == CMR_ERROR_INCONSISTENT) \
70 fprintf(stderr, "Inconsistent input"); \
71 else if (_cmr_error == CMR_ERROR_PARAMS) \
72 fprintf(stderr, "Invalid parameters"); \
73 else \
74 fprintf(stderr, "Unknown error"); \
75 fprintf(stderr, " in %s:%d.\n", __FILE__, __LINE__); \
76 return _cmr_error; \
77 } \
78 } while (false)
79
80struct CMR_ENVIRONMENT;
81
88typedef struct CMR_ENVIRONMENT CMR;
89
96CMR_EXPORT
98 CMR** pcmr
99);
100
105CMR_EXPORT
107 CMR** pcmr
108);
109
117#define CMRallocBlock(cmr, ptr) \
118 _CMRallocBlock(cmr, (void**) ptr, sizeof(**ptr))
119
126CMR_EXPORT
127CMR_ERROR _CMRallocBlock(CMR* cmr, void** ptr, size_t size);
128
133#define CMRfreeBlock(cmr, ptr) \
134 _CMRfreeBlock(cmr, (void**) ptr, sizeof(**ptr))
135
142CMR_EXPORT
143CMR_ERROR _CMRfreeBlock(CMR* cmr, void** ptr, size_t size);
144
153#define CMRallocBlockArray(cmr, ptr, length) \
154 _CMRallocBlockArray(cmr, (void**) ptr, sizeof(**ptr), length)
155
162CMR_EXPORT
163CMR_ERROR _CMRallocBlockArray(CMR* cmr, void** ptr, size_t size, size_t length);
164
172#define CMRreallocBlockArray(cmr, ptr, length) \
173 _CMRreallocBlockArray(cmr, (void**) ptr, sizeof(**ptr), length)
174
181CMR_EXPORT
182CMR_ERROR _CMRreallocBlockArray(CMR* cmr, void** ptr, size_t size, size_t length);
183
192#define CMRduplicateBlockArray(cmr, ptr, length, source) \
193 _CMRduplicateBlockArray(cmr, (void**) ptr, sizeof(**ptr), length, source)
194
201CMR_EXPORT
202CMR_ERROR _CMRduplicateBlockArray(CMR* cmr, void** ptr, size_t size, size_t length, void* source);
203
210#define CMRfreeBlockArray(cmr, ptr) \
211 _CMRfreeBlockArray(cmr, (void**) ptr)
212
213CMR_EXPORT
214CMR_ERROR _CMRfreeBlockArray(CMR* cmr, void** ptr);
215
220CMR_EXPORT
222 CMR* cmr
223);
224
229CMR_EXPORT
231 CMR* cmr
232);
233
234
235#ifdef __cplusplus
236}
237#endif
238
239#endif /* CMR_ENV_H */
240
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 char * CMRgetErrorMessage(CMR *cmr)
Returns the error message (or NULL if no error with a message occured).
Definition env.c:397
CMR_EXPORT void CMRclearErrorMessage(CMR *cmr)
Clears the error message.
Definition env.c:402
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_INCONSISTENT
Definition env.h:41
@ CMR_ERROR_PARAMS
Definition env.h:42
@ CMR_ERROR_OUTPUT
Definition env.h:35
@ CMR_ERROR_STRUCTURE
Definition env.h:40
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