00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _ACEXML_MACROS_H
00023 #define _ACEXML_MACROS_H
00024
00025 #include "ace/pre.h"
00026
00027 #include "ace/config-all.h"
00028
00029 # if !defined (ACE_LACKS_PRAGMA_ONCE)
00030 # pragma once
00031 # endif
00032
00033 #include "ace/Exception_Macros.h"
00034
00035
00036
00037
00038
00039 #if !defined (ACEXML_ENV_TYPE)
00040 # define ACEXML_ENV_TYPE ACEXML_Env
00041 #endif
00042
00043
00044
00045
00046
00047
00048 #if !defined (ACEXML_TRY_ENV)
00049 # define ACEXML_TRY_ENV _ACEXML_Env_variable
00050 #endif
00051
00052
00053
00054
00055 #if !defined (ACEXML_EXCEPTION_TYPE)
00056 # define ACEXML_EXCEPTION_TYPE ACEXML_Exception
00057 #endif
00058
00059
00060 #if !defined (ACEXML_ANY_EXCEPTION)
00061 # define ACEXML_ANY_EXCEPTION ex
00062 #endif
00063
00064
00065
00066 #define ACEXML_DECLARE_NEW_ENV \
00067 ACEXML_ENV_TYPE ACEXML_TRY_ENV
00068
00069 #if defined (ACE_USES_NATIVE_EXCEPTIONS)
00070
00071
00072 #define ACEXML_ADOPT_ENV (ENV)
00073
00074
00075
00076 # define ACEXML_CHECK
00077
00078
00079 # define ACEXML_CHECK_RETURN(RETV)
00080
00081
00082 # define ACEXML_THROW_R_INT(EXCEPTION) \
00083 throw EXCEPTION
00084
00085
00086
00087 # define ACEXML_THROW(EXCEPTION) \
00088 throw EXCEPTION
00089
00090
00091 # if defined (__HP_aCC)
00092 # define ACEXML_THROW_RETURN(EXCEPTION, RETV) \
00093 do \
00094 { \
00095 throw EXCEPTION; \
00096 return RETV; \
00097 } while (0)
00098 # else
00099 # define ACEXML_THROW_RETURN(EXCEPTION,RETV) \
00100 throw EXCEPTION
00101 # endif
00102
00103
00104
00105 # define ACEXML_TRY \
00106 do \
00107 { \
00108 try \
00109 {
00110 # define ACEXML_TRY_NEW_ENV \
00111 do \
00112 { \
00113 ACEXML_ENV_TYPE ACEXML_TRY_ENV; \
00114 try \
00115 {
00116 # define ACEXML_TRY_EX(LABEL) \
00117 do \
00118 { \
00119 try \
00120 {
00121
00122
00123
00124 # define ACEXML_TRY_CHECK
00125 # define ACEXML_TRY_CHECK_EX(LABEL)
00126
00127
00128 # define ACEXML_TRY_THROW(EXCEPTION) throw EXCEPTION
00129 # define ACEXML_TRY_THROW_EX(EXCEPTION,LABEL) throw EXCEPTION
00130
00131
00132 # define ACEXML_CATCH(EXCEPTION,VAR) \
00133 } \
00134 catch (EXCEPTION & VAR) \
00135 { \
00136 ACE_UNUSED_ARG (VAR);
00137
00138 # define ACEXML_CATCHANY \
00139 ACEXML_CATCH(ACEXML_EXCEPTION_TYPE, ACEXML_ANY_EXCEPTION)
00140
00141 # define ACEXML_CATCHALL \
00142 } \
00143 catch (...) \
00144 {
00145
00146
00147 # define ACEXML_RE_THROW throw
00148 # define ACEXML_RE_THROW_EX(LABEL) throw
00149
00150
00151 # define ACEXML_ENDTRY \
00152 } \
00153 } while (0)
00154
00155 #else
00156
00157
00158
00159
00160
00161
00162
00163 # define ACEXML_ADOPT_ENV(ENV) ACEXML_ENV_TYPE &ACEXML_TRY_ENV = ENV
00164
00165
00166
00167
00168 # define ACEXML_CHECK \
00169 if (ACEXML_TRY_ENV . exception () != 0) \
00170 return
00171
00172 # define ACEXML_CHECK_RETURN(RETV) \
00173 if (ACEXML_TRY_ENV . exception () != 0) \
00174 return RETV
00175
00176
00177 # define ACEXML_THROW_R_INT(EXCEPTION) ACEXML_TRY_ENV.exception (new EXCEPTION)
00178
00179
00180
00181
00182 # define ACEXML_THROW(EXCEPTION) \
00183 do \
00184 { \
00185 ACEXML_TRY_ENV.exception (new EXCEPTION); \
00186 return; \
00187 } while (0)
00188
00189 # define ACEXML_THROW_RETURN(EXCEPTION,RETV) \
00190 do \
00191 { \
00192 ACEXML_TRY_ENV.exception (new EXCEPTION); \
00193 return RETV; \
00194 } while (0)
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205 # define ACEXML_TRY \
00206 do { \
00207 int ACEXML_TRY_FLAG = 1; \
00208 int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \
00209 ACEXML_TRY_LABEL: \
00210 if (ACEXML_TRY_FLAG) \
00211 do {
00212
00213
00214
00215
00216 # define ACEXML_TRY_NEW_ENV \
00217 do { \
00218 ACEXML_ENV_TYPE ACEXML_TRY_ENV;\
00219 int ACEXML_TRY_FLAG = 1; \
00220 int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \
00221 ACEXML_TRY_LABEL: \
00222 if (ACEXML_TRY_FLAG) \
00223 do {
00224
00225
00226
00227
00228
00229 # define ACEXML_TRY_EX(LABEL) \
00230 do { \
00231 int ACEXML_TRY_FLAG = 1; \
00232 int ACEXML_EXCEPTION_NOT_CAUGHT = 1; \
00233 ACEXML_TRY_LABEL ## LABEL: \
00234 if (ACEXML_TRY_FLAG) \
00235 do {
00236
00237
00238 # define ACEXML_TRY_CHECK \
00239 { \
00240 if (ACEXML_TRY_ENV.exception () != 0) \
00241 { \
00242 ACEXML_TRY_FLAG = 0; \
00243 goto ACEXML_TRY_LABEL; \
00244 } \
00245 }
00246
00247
00248 # define ACEXML_TRY_CHECK_EX(LABEL) \
00249 { \
00250 if (ACEXML_TRY_ENV.exception () != 0) \
00251 { \
00252 ACEXML_TRY_FLAG = 0; \
00253 goto ACEXML_TRY_LABEL ## LABEL; \
00254 } \
00255 }
00256
00257
00258 # define ACEXML_TRY_THROW(EXCEPTION) \
00259 { \
00260 ACEXML_TRY_ENV.exception (new EXCEPTION); \
00261 ACEXML_TRY_FLAG = 0; \
00262 goto ACEXML_TRY_LABEL; \
00263 }
00264
00265 # define ACEXML_TRY_THROW_EX(EXCEPTION,LABEL) \
00266 { \
00267 ACEXML_TRY_ENV.exception (new EXCEPTION); \
00268 ACEXML_TRY_FLAG = 0; \
00269 goto ACEXML_TRY_LABEL ## LABEL; \
00270 }
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282 # define ACEXML_CATCH(TYPE,VAR) \
00283 } while (0); \
00284 do \
00285 if (ACEXML_TRY_ENV.exception () != 0 && ACEXML_EXCEPTION_NOT_CAUGHT && \
00286 TYPE::_downcast(ACEXML_TRY_ENV.exception ()) != 0) \
00287 { \
00288 ACEXML_ENV_TYPE ACEXML_CAUGHT_ENV = ACEXML_TRY_ENV;\
00289 ACEXML_EXCEPTION_NOT_CAUGHT = 0; \
00290 TYPE &VAR = *TYPE::_downcast (ACEXML_CAUGHT_ENV.exception ()); \
00291 ACE_UNUSED_ARG (VAR); \
00292 ACEXML_TRY_ENV.clear ();
00293
00294
00295
00296 # define ACEXML_CATCHANY ACEXML_CATCH (ACEXML_EXCEPTION_TYPE, ACEXML_ANY_EXCEPTION)
00297
00298
00299
00300
00301 # define ACEXML_CATCHALL ACEXML_CATCHANY
00302
00303
00304
00305
00306
00307
00308 # define ACEXML_RE_THROW \
00309 do {\
00310 ACEXML_TRY_ENV = ACEXML_CAUGHT_ENV; \
00311 goto ACEXML_TRY_LABEL; \
00312 } while (0)
00313 # define ACEXML_RE_THROW_EX(LABEL) \
00314 do {\
00315 ACEXML_TRY_ENV = ACEXML_CAUGHT_ENV; \
00316 goto ACEXML_TRY_LABEL ## LABEL; \
00317 } while (0)
00318
00319
00320
00321
00322
00323 # define ACEXML_ENDTRY \
00324 } while (0); \
00325 } while (0)
00326
00327 #endif
00328
00329
00330 #if defined(ACE_NEW_THROWS_EXCEPTIONS)
00331
00332 # define ACEXML_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \
00333 do { try { POINTER = new CONSTRUCTOR; } \
00334 catch (ACE_bad_alloc) { errno = ENOMEM; ACEXML_THROW_R_INT (EXCEPTION); } \
00335 } while (0)
00336
00337 #else
00338
00339 # define ACEXML_NEW_THROW_EX(POINTER,CONSTRUCTOR,EXCEPTION) \
00340 do { POINTER = new CONSTRUCTOR; \
00341 if (POINTER == 0) { errno = ENOMEM; ACEXML_THROW_R_INT (EXCEPTION); } \
00342 } while (0)
00343
00344 #endif
00345
00346 # define ACEXML_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \
00347 ACE_Guard< MUTEX > OBJ (LOCK); \
00348 if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION);
00349
00350 # define ACEXML_READ_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \
00351 ACE_Read_Guard< MUTEX > OBJ (LOCK); \
00352 if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION);
00353
00354 # define ACEXML_WRITE_GUARD_THROW_EX(MUTEX,OBJ,LOCK,EXCEPTION) \
00355 ACE_Write_Guard< MUTEX > OBJ (LOCK); \
00356 if (OBJ.locked () == 0) ACEXML_THROW_R_INT (EXCEPTION);
00357
00358
00359
00360
00361
00362
00363
00364
00365
00366
00367
00368
00369 #if !defined (ACE_USES_NATIVE_EXCEPTIONS) || defined (ACEXML_ENV_BKWD_COMPAT)
00370 # define ACEXML_ENV_EMIT_CODE(X) X
00371 #else
00372 # define ACEXML_ENV_EMIT_CODE(X)
00373 #endif
00374
00375
00376 #if !defined (ACE_USES_NATIVE_EXCEPTIONS) || defined (ACEXML_ENV_BKWD_COMPAT)
00377 # define ACEXML_ENV_EMIT_CODE2(X,Y) X,Y
00378 #else
00379 # define ACEXML_ENV_EMIT_CODE2(X,Y)
00380 #endif
00381
00382
00383 #define ACEXML_ENV_EMIT_DUMMY
00384
00385
00386
00387
00388
00389
00390
00391
00392
00393
00394
00395
00396 #define ACEXML_ENV_ARG_DECL \
00397 ACEXML_ENV_EMIT_CODE2(ACEXML_ENV_EMIT_DUMMY, \
00398 ACEXML_ENV_TYPE &ACEXML_TRY_ENV)
00399
00400
00401
00402
00403
00404
00405
00406 #define ACEXML_ENV_ARG_DECL_NOT_USED \
00407 ACEXML_ENV_EMIT_CODE2(ACEXML_ENV_EMIT_DUMMY, \
00408 ACEXML_ENV_TYPE &)
00409
00410
00411
00412 #define ACEXML_ENV_SINGLE_ARG_DECL \
00413 ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &ACEXML_TRY_ENV)
00414
00415
00416 #define ACEXML_ENV_SINGLE_ARG_DECL_NOT_USED \
00417 ACEXML_ENV_EMIT_CODE(ACEXML_ENV_TYPE &)
00418
00419
00420 #define ACEXML_ENV_ARG_PARAMETER \
00421 ACEXML_ENV_EMIT_CODE2(ACEXML_ENV_EMIT_DUMMY, \
00422 ACEXML_TRY_ENV)
00423
00424
00425
00426 #define ACEXML_ENV_SINGLE_ARG_PARAMETER \
00427 ACEXML_ENV_EMIT_CODE(ACEXML_TRY_ENV)
00428
00429
00430 #define ACEXML_ENV_ARG_NOT_USED \
00431 ACEXML_ENV_EMIT_CODE(ACE_UNUSED_ARG(ACEXML_TRY_ENV))
00432
00433
00434 #if !defined (ACE_USES_NATIVE_EXCEPTIONS)
00435
00436 # define ACEXML_ENV_RAISE(ex) ACEXML_TRY_ENV.exception (ex)
00437 #else
00438 # define ACEXML_ENV_RAISE(ex) (ex)->_raise ()
00439 #endif
00440
00441 #include "ace/post.h"
00442
00443 #endif