esio  0.1.9
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
error.h
Go to the documentation of this file.
1 //-----------------------------------------------------------------------bl-
2 //--------------------------------------------------------------------------
3 //
4 // ESIO 0.1.9: ExaScale IO library for turbulence simulation restart files
5 // http://red.ices.utexas.edu/projects/esio/
6 //
7 // Copyright (C) 2010-2014 The PECOS Development Team
8 //
9 // This file is part of ESIO.
10 //
11 // ESIO is free software: you can redistribute it and/or modify
12 // it under the terms of the GNU Lesser General Public License as published
13 // by the Free Software Foundation, either version 3.0 of the License, or
14 // (at your option) any later version.
15 //
16 // ESIO is distributed in the hope that it will be useful,
17 // but WITHOUT ANY WARRANTY; without even the implied warranty of
18 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 // GNU Lesser General Public License for more details.
20 //
21 // You should have received a copy of the GNU Lesser General Public License
22 // along with ESIO. If not, see <http://www.gnu.org/licenses/>.
23 //
24 //-----------------------------------------------------------------------el-
25 // $Id$
26 
27 #ifndef ESIO_ERROR_H
28 #define ESIO_ERROR_H
29 
30 #include <stdio.h>
31 #include <esio/visibility.h>
32 
44 #ifdef __cplusplus
45 extern "C" {
46 #endif
47 
65 };
66 
86 void
87 esio_error(const char * reason,
88  const char * file,
89  int line,
90  int esio_errno) ESIO_API;
91 
103 void
104 esio_stream_printf(const char *label,
105  const char *file,
106  int line,
107  const char *reason) ESIO_API;
108 
116 const char *
117 esio_strerror(const int esio_errno) ESIO_API;
118 
130 typedef void esio_error_handler_t(const char * reason,
131  const char * file,
132  int line,
133  int esio_errno);
134 
146 typedef void esio_stream_handler_t(const char * label,
147  const char * file,
148  int line,
149  const char * reason);
150 
160 esio_set_error_handler(esio_error_handler_t * new_handler) ESIO_API;
161 
169 esio_set_error_handler_off(void) ESIO_API;
170 
181 esio_set_stream_handler(esio_stream_handler_t * new_handler) ESIO_API;
182 
191 FILE *
192 esio_set_stream(FILE * new_stream) ESIO_API;
193 
202 #define ESIO_ERROR(reason, esio_errno) \
203  do { \
204  esio_error (reason, __FILE__, __LINE__, esio_errno) ; \
205  return esio_errno ; \
206  } while (0)
207 
216 #define ESIO_ERROR_VAL(reason, esio_errno, value) \
217  do { \
218  esio_error (reason, __FILE__, __LINE__, esio_errno) ; \
219  return value ; \
220  } while (0)
221 
229 #define ESIO_ERROR_VOID(reason, esio_errno) \
230  do { \
231  esio_error (reason, __FILE__, __LINE__, esio_errno) ; \
232  return ; \
233  } while (0)
234 
243 #define ESIO_ERROR_NULL(reason, esio_errno) \
244  ESIO_ERROR_VAL(reason, esio_errno, 0)
245 
254 #define ESIO_ERROR_REPORT(reason, esio_errno) \
255  do { \
256  esio_error (reason, __FILE__, __LINE__, esio_errno) ; \
257  } while (0)
258 
260 /* Internal helper macro for implementing ESIO_MPICHKx macros */
261 #define ESIO_MPICHKx_TEMPLATE(esio_error_macro,stmt) \
262  do { \
263  const int _chk_stat = (stmt); \
264  if (_chk_stat != MPI_SUCCESS) { \
265  char _chk_reason[384]; \
266  char _chk_mpistring[MPI_MAX_ERROR_STRING]; \
267  int _chk_len; \
268  const int _chk_string_stat \
269  = MPI_Error_string(_chk_stat,_chk_mpistring,&_chk_len); \
270  snprintf(_chk_reason, sizeof(_chk_reason)/sizeof(_chk_reason[0]), \
271  "Encountered MPI error code %d: %s", _chk_stat, \
272  (_chk_string_stat == MPI_SUCCESS) \
273  ? _chk_mpistring : "UNKNOWN"); \
274  esio_error_macro(_chk_reason, ESIO_EFAILED); \
275  } \
276  } while(0)
277 
292 #define ESIO_MPICHKQ(stmt) \
293  ESIO_MPICHKx_TEMPLATE(ESIO_ERROR,stmt)
294 
307 #define ESIO_MPICHKN(stmt) \
308  ESIO_MPICHKx_TEMPLATE(ESIO_ERROR_NULL,stmt)
309 
322 #define ESIO_MPICHKV(stmt) \
323  ESIO_MPICHKx_TEMPLATE(ESIO_ERROR_VOID,stmt)
324 
337 #define ESIO_MPICHKR(stmt) \
338  ESIO_MPICHKx_TEMPLATE(ESIO_ERROR_REPORT,stmt)
339 
340 #ifdef __cplusplus
341 } /* extern "C" */
342 #endif
343 
344 #endif /* ESIO_ERROR_H */

Generated on Thu Jan 16 2014 10:16:33 for esio by  doxygen 1.8.2