00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 #ifndef _H5Epublic_H
00020 #define _H5Epublic_H
00021 
00022 #include <stdio.h>              
00023 
00024 
00025 #include "H5public.h"
00026 #include "H5Ipublic.h"
00027 
00028 
00029 #define H5E_DEFAULT             0
00030 
00031 
00032 typedef enum H5E_type_t {
00033     H5E_MAJOR,
00034     H5E_MINOR
00035 } H5E_type_t;
00036 
00037 
00038 typedef struct H5E_error2_t {
00039     hid_t       cls_id;         
00040     hid_t       maj_num;        
00041     hid_t       min_num;        
00042     unsigned    line;           
00043     const char  *func_name;     
00044     const char  *file_name;     
00045     const char  *desc;          
00046 } H5E_error2_t;
00047 
00048 
00049 #undef H5OPEN
00050 #ifndef _H5private_H
00051 #define H5OPEN          H5open(),
00052 #else   
00053 #define H5OPEN
00054 #endif  
00055 
00056 
00057 #define H5E_ERR_CLS             (H5OPEN H5E_ERR_CLS_g)
00058 H5_DLLVAR hid_t H5E_ERR_CLS_g;
00059 
00060 
00061 
00062 #include "H5Epubgen.h"
00063 
00064 
00065 
00066 
00067 
00068 
00069 
00070 
00071 
00072 
00073 
00074 
00075 
00076 
00077 
00078 
00079 #ifndef H5_NO_DEPRECATED_SYMBOLS
00080 #define H5E_BEGIN_TRY {                                                       \
00081     unsigned H5E_saved_is_v2;                                                 \
00082     union {                                                                   \
00083         H5E_auto1_t efunc1;                                                   \
00084         H5E_auto2_t efunc2;                                                   \
00085     } H5E_saved;                                                              \
00086     void *H5E_saved_edata;                                                    \
00087                                                                               \
00088     (void)H5Eauto_is_v2(H5E_DEFAULT, &H5E_saved_is_v2);                       \
00089     if(H5E_saved_is_v2) {                                                     \
00090         (void)H5Eget_auto2(H5E_DEFAULT, &H5E_saved.efunc2, &H5E_saved_edata); \
00091         (void)H5Eset_auto2(H5E_DEFAULT, NULL, NULL);                          \
00092     } else {                                                                  \
00093         (void)H5Eget_auto1(&H5E_saved.efunc1, &H5E_saved_edata);                      \
00094         (void)H5Eset_auto1(NULL, NULL);                                       \
00095     }
00096 
00097 #define H5E_END_TRY                                                           \
00098     if(H5E_saved_is_v2)                                                       \
00099         (void)H5Eset_auto2(H5E_DEFAULT, H5E_saved.efunc2, H5E_saved_edata);   \
00100     else                                                                      \
00101         (void)H5Eset_auto1(H5E_saved.efunc1, H5E_saved_edata);                \
00102 }
00103 #else 
00104 #define H5E_BEGIN_TRY {                                                       \
00105     H5E_auto_t saved_efunc;                                                   \
00106     void *H5E_saved_edata;                                                    \
00107                                                                               \
00108     (void)H5Eget_auto(H5E_DEFAULT, &saved_efunc, &H5E_saved_edata);           \
00109     (void)H5Eset_auto(H5E_DEFAULT, NULL, NULL);
00110 
00111 #define H5E_END_TRY                                                           \
00112     (void)H5Eset_auto(H5E_DEFAULT, saved_efunc, H5E_saved_edata);             \
00113 }
00114 #endif 
00115 
00116 
00117 
00118 
00119 
00120 #define H5Epush_sim(func, cls, maj, min, str) H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str)
00121 
00122 
00123 
00124 
00125 
00126 
00127 #define H5Epush_ret(func, cls, maj, min, str, ret) {                          \
00128     H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str);      \
00129     return(ret);                                                              \
00130 }
00131 
00132 
00133 
00134 
00135 #define H5Epush_goto(func, cls, maj, min, str, label) {                       \
00136     H5Epush2(H5E_DEFAULT, __FILE__, func, __LINE__, cls, maj, min, str);      \
00137     goto label;                                                               \
00138 }
00139 
00140 
00141 typedef enum H5E_direction_t {
00142     H5E_WALK_UPWARD     = 0,            
00143     H5E_WALK_DOWNWARD   = 1             
00144 } H5E_direction_t;
00145 
00146 
00147 #ifdef __cplusplus
00148 extern "C" {
00149 #endif
00150 
00151 
00152 typedef herr_t (*H5E_walk2_t)(unsigned n, const H5E_error2_t *err_desc,
00153     void *client_data);
00154 typedef herr_t (*H5E_auto2_t)(hid_t estack, void *client_data);
00155 
00156 
00157 H5_DLL hid_t  H5Eregister_class(const char *cls_name, const char *lib_name,
00158     const char *version);
00159 H5_DLL herr_t H5Eunregister_class(hid_t class_id);
00160 H5_DLL herr_t H5Eclose_msg(hid_t err_id);
00161 H5_DLL hid_t  H5Ecreate_msg(hid_t cls, H5E_type_t msg_type, const char *msg);
00162 H5_DLL hid_t  H5Ecreate_stack(void);
00163 H5_DLL hid_t  H5Eget_current_stack(void);
00164 H5_DLL herr_t H5Eclose_stack(hid_t stack_id);
00165 H5_DLL ssize_t H5Eget_class_name(hid_t class_id, char *name, size_t size);
00166 H5_DLL herr_t H5Eset_current_stack(hid_t err_stack_id);
00167 H5_DLL herr_t H5Epush2(hid_t err_stack, const char *file, const char *func, unsigned line,
00168     hid_t cls_id, hid_t maj_id, hid_t min_id, const char *msg, ...);
00169 H5_DLL herr_t H5Epop(hid_t err_stack, size_t count);
00170 H5_DLL herr_t H5Eprint2(hid_t err_stack, FILE *stream);
00171 H5_DLL herr_t H5Ewalk2(hid_t err_stack, H5E_direction_t direction, H5E_walk2_t func,
00172     void *client_data);
00173 H5_DLL herr_t H5Eget_auto2(hid_t estack_id, H5E_auto2_t *func, void **client_data);
00174 H5_DLL herr_t H5Eset_auto2(hid_t estack_id, H5E_auto2_t func, void *client_data);
00175 H5_DLL herr_t H5Eclear2(hid_t err_stack);
00176 H5_DLL herr_t H5Eauto_is_v2(hid_t err_stack, unsigned *is_stack);
00177 H5_DLL ssize_t H5Eget_msg(hid_t msg_id, H5E_type_t *type, char *msg,
00178     size_t size);
00179 H5_DLL ssize_t H5Eget_num(hid_t error_stack_id);
00180 
00181 
00182 
00183 
00184 
00185 
00186 #ifndef H5_NO_DEPRECATED_SYMBOLS
00187 
00188 
00189 
00190 
00191 
00192 
00193 typedef hid_t   H5E_major_t;
00194 typedef hid_t   H5E_minor_t;
00195 
00196 
00197 typedef struct H5E_error1_t {
00198     H5E_major_t maj_num;                
00199     H5E_minor_t min_num;                
00200     const char  *func_name;             
00201     const char  *file_name;             
00202     unsigned    line;                   
00203     const char  *desc;                  
00204 } H5E_error1_t;
00205 
00206 
00207 typedef herr_t (*H5E_walk1_t)(int n, H5E_error1_t *err_desc, void *client_data);
00208 typedef herr_t (*H5E_auto1_t)(void *client_data);
00209 
00210 
00211 H5_DLL herr_t H5Eclear1(void);
00212 H5_DLL herr_t H5Eget_auto1(H5E_auto1_t *func, void **client_data);
00213 H5_DLL herr_t H5Epush1(const char *file, const char *func, unsigned line,
00214     H5E_major_t maj, H5E_minor_t min, const char *str);
00215 H5_DLL herr_t H5Eprint1(FILE *stream);
00216 H5_DLL herr_t H5Eset_auto1(H5E_auto1_t func, void *client_data);
00217 H5_DLL herr_t H5Ewalk1(H5E_direction_t direction, H5E_walk1_t func,
00218     void *client_data);
00219 H5_DLL char *H5Eget_major(H5E_major_t maj);
00220 H5_DLL char *H5Eget_minor(H5E_minor_t min);
00221 #endif 
00222 
00223 #ifdef __cplusplus
00224 }
00225 #endif
00226 
00227 #endif 
00228