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