00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00047 #ifndef XCONTRACT_INCL_XCONTRACT_H_XCONTRACT
00048 #define XCONTRACT_INCL_XCONTRACT_H_XCONTRACT
00049
00050 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00051 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_MAJOR 2
00052 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_MINOR 4
00053 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_REVISION 1
00054 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_EDIT 177
00055 #endif
00056
00057
00058
00059
00060
00075 #define XCONTRACT_VER_MAJOR 0
00076 #define XCONTRACT_VER_MINOR 3
00077 #define XCONTRACT_VER_REVISION 3
00078
00079 #define XCONTRACT_VER 0x000303ff
00080
00081
00082
00083
00084
00085 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00086 # include <stlsoft/stlsoft.h>
00087 #endif
00088
00089 #ifdef __cplusplus
00090 # if defined(UNIX) || \
00091 defined(unix) || \
00092 defined(unix__) || \
00093 defined(__unix) || \
00094 defined(__unix__)
00095
00096
00097
00098
00099
00100 # include <unixstl/synch/util/features.h>
00101 # endif
00102 # if defined(STLSOFT_CF_EXCEPTION_SUPPORT)
00103 # include <new>
00104 # include <stdexcept>
00105 # endif
00106 #endif
00107
00108
00109
00110
00111
00112 #if _STLSOFT_VER < 0x010937ff
00113 # error xContract requires version 1.9.55 (or later) of STLSoft; download from www.stlsoft.org
00114 #endif
00115
00116
00117
00118
00119
00120 #if defined(_STLSOFT_NO_NAMESPACE)
00121 # define _XCONTRACT_NO_NAMESPACE
00122 #endif
00123
00124 #ifndef _XCONTRACT_NO_NAMESPACE
00125
00129 namespace xcontract
00130 {
00131 #endif
00132
00133
00134
00135
00136
00146
00147
00148
00149
00150 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00151
00152 # if !defined(XCONTRACT_DECLSPEC)
00153 # define XCONTRACT_DECLSPEC
00154 # endif
00155
00156 # if defined(__cplusplus) || \
00157 defined(XCONTRACT_DOCUMENTATION_SKIP_SECTION)
00158 # define XCONTRACT_EXTERN_C extern "C"
00159 # else
00160 # define XCONTRACT_EXTERN_C extern
00161 # endif
00162
00163 # if !defined(XCONTRACT_CALLCONV)
00164 # define XCONTRACT_CALLCONV
00165 # endif
00166
00167 # define XCONTRACT_CALL(rt) XCONTRACT_DECLSPEC XCONTRACT_EXTERN_C rt XCONTRACT_CALLCONV
00168
00169 # ifdef STLSOFT_CF_FUNCTION_SYMBOL_SUPPORT
00170 # define XCONTRACT_GET_FUNCTION_() __FUNCTION__
00171 # else
00172 # define XCONTRACT_GET_FUNCTION_() stlsoft_static_cast(char const*, 0)
00173 # endif
00174
00175 # ifndef _XCONTRACT_NO_NAMESPACE
00176 # define XCONTRACT_NS_QUAL(sym) xcontract::sym
00177 # else
00178 # define XCONTRACT_NS_QUAL(sym) sym
00179 # endif
00180
00181
00182 # if defined(STLSOFT_COMPILER_IS_MSVC) && \
00183 _MSC_VER >= 1200
00184 # define XCONTRACT_NORETURN __declspec(noreturn)
00185 # else
00186 # define XCONTRACT_NORETURN
00187 # endif
00188
00189 #endif
00190
00191
00192
00193
00194
00195
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234
00235
00236
00237
00238
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248 #ifndef XCONTRACT_NO_STOCK_MODES
00249
00250 # if !defined(XCONTRACT_MODE_DEBUG) && \
00251 !defined(XCONTRACT_MODE_TEST) && \
00252 !defined(XCONTRACT_MODE_RELEASE) && \
00253 !defined(XCONTRACT_MODE_OFF)
00254
00255
00256
00257 # if !defined(NDEBUG)
00258 # define XCONTRACT_MODE_DEBUG
00259 # else
00260 # define XCONTRACT_MODE_RELEASE
00261 # endif
00262 # endif
00263
00264 # if defined(XCONTRACT_MODE_DEBUG)
00265
00266 # define XCONTRACT_ENFORCING_UNEXPECTED_CONDITION (1)
00267 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 (1)
00268 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 (1)
00269 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 (1)
00270 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 (1)
00271 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 (1)
00272 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 (1)
00273 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 (1)
00274 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 (1)
00275 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 (1)
00276 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 (1)
00277 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 (1)
00278 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 (1)
00279 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 (1)
00280 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 (1)
00281 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 (1)
00282 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 (1)
00283 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 (1)
00284 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 (1)
00285 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 (1)
00286 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 (1)
00287 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0 (1)
00288 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1 (1)
00289 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2 (1)
00290 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3 (1)
00291 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4 (1)
00292 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_0 (1)
00293 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_1 (1)
00294 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_2 (1)
00295 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_3 (1)
00296 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_4 (1)
00297 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 (1)
00298 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 (1)
00299 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 (1)
00300 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 (1)
00301 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 (1)
00302 # define XCONTRACT_ENFORCING_STATIC_DATA_0 (1)
00303 # define XCONTRACT_ENFORCING_STATIC_DATA_1 (1)
00304 # define XCONTRACT_ENFORCING_STATIC_DATA_2 (1)
00305 # define XCONTRACT_ENFORCING_STATIC_DATA_3 (1)
00306 # define XCONTRACT_ENFORCING_STATIC_DATA_4 (1)
00307 # define XCONTRACT_ENFORCING_ASSUMPTION_0 (1)
00308 # define XCONTRACT_ENFORCING_ASSUMPTION_1 (1)
00309 # define XCONTRACT_ENFORCING_ASSUMPTION_2 (1)
00310 # define XCONTRACT_ENFORCING_ASSUMPTION_3 (1)
00311 # define XCONTRACT_ENFORCING_ASSUMPTION_4 (1)
00312 # endif
00313
00314 # if defined(XCONTRACT_MODE_TEST)
00315
00316 # define XCONTRACT_ENFORCING_UNEXPECTED_CONDITION (1)
00317 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 (1)
00318 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 (1)
00319 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 (1)
00320 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 (1)
00321 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 (1)
00322 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 (1)
00323 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 (1)
00324 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 (1)
00325 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 (1)
00326 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 (1)
00327 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 (1)
00328 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 (1)
00329 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 (1)
00330 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 (1)
00331 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 (1)
00332 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 (1)
00333 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 (1)
00334 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 (1)
00335 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 (1)
00336 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 (1)
00337 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_0 (1)
00338 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_1 (1)
00339 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_2 (1)
00340 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_3 (1)
00341 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_4 (1)
00342 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 (1)
00343 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 (1)
00344 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 (1)
00345 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 (1)
00346 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 (1)
00347 # define XCONTRACT_ENFORCING_STATIC_DATA_0 (1)
00348 # define XCONTRACT_ENFORCING_STATIC_DATA_1 (1)
00349 # define XCONTRACT_ENFORCING_STATIC_DATA_2 (1)
00350 # define XCONTRACT_ENFORCING_STATIC_DATA_3 (1)
00351 # define XCONTRACT_ENFORCING_STATIC_DATA_4 (1)
00352 # define XCONTRACT_ENFORCING_ASSUMPTION_0 (1)
00353 # define XCONTRACT_ENFORCING_ASSUMPTION_1 (1)
00354 # define XCONTRACT_ENFORCING_ASSUMPTION_2 (1)
00355 # define XCONTRACT_ENFORCING_ASSUMPTION_3 (1)
00356 # define XCONTRACT_ENFORCING_ASSUMPTION_4 (1)
00357 # endif
00358
00359 # if defined(XCONTRACT_MODE_RELEASE)
00360
00361 # define XCONTRACT_ENFORCING_UNEXPECTED_CONDITION (1)
00362 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 (1)
00363 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 (1)
00364 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 (1)
00365 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 (1)
00366 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 (1)
00367 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 (1)
00368 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 (1)
00369 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 (1)
00370 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 (1)
00371 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 (1)
00372 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_0 (1)
00373 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_1 (1)
00374 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_2 (1)
00375 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_3 (1)
00376 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_4 (1)
00377 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 (1)
00378 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 (1)
00379 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 (1)
00380 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 (1)
00381 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 (1)
00382 # define XCONTRACT_ENFORCING_STATIC_DATA_0 (1)
00383 # define XCONTRACT_ENFORCING_STATIC_DATA_1 (1)
00384 # define XCONTRACT_ENFORCING_STATIC_DATA_2 (1)
00385 # define XCONTRACT_ENFORCING_STATIC_DATA_3 (1)
00386 # define XCONTRACT_ENFORCING_STATIC_DATA_4 (1)
00387 # endif
00388
00389 # if defined(XCONTRACT_MODE_OFF)
00390
00391 # endif
00392
00393
00394 #endif
00395
00396
00397
00398
00399
00404 enum xContract_violation_type_t
00405 {
00406 xContract_unexpectedCondition
00407 , xContract_precondition_logic
00408 , xContract_precondition_parameters
00409 , xContract_postcondition_returnValue
00410 , xContract_postcondition_logic
00411 , xContract_postcondition_parameters
00412 , xContract_invariant_class
00413 , xContract_invariant_global
00414 , xContract_staticData
00415 , xContract_intermediateAssumption
00417 , xContract_maximum_value
00418 };
00419 #ifndef __cplusplus
00420 typedef enum xContract_violation_type_t xContract_violation_type_t;
00421 #endif
00422 #ifndef _XCONTRACT_NO_NAMESPACE
00423 typedef enum xContract_violation_type_t violation_type_t;
00424 #endif
00425
00426 typedef void (XCONTRACT_CALLCONV *xContract_violationReport_fn_t)( char const* file
00427 , unsigned line
00428 , char const* function
00429 , char const* expression
00430 , char const* message
00431 , char const* qualifier
00432 , xContract_violation_type_t type
00433 , int level);
00434
00435 #ifndef _XCONTRACT_NO_NAMESPACE
00436 typedef xContract_violationReport_fn_t violationReport_fn_t;
00437 #endif
00438
00439
00440
00441
00442
00443
00444
00445
00446
00447
00448
00449
00450 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00451
00452 # ifdef XCONTRACT_VERIFY_CONDITION_AT_RUNTIME
00453 # define XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, expr, msg) XCONTRACT_NS_QUAL(xContract_isConditionVerified)(type, level, __FILE__, __LINE__, XCONTRACT_GET_FUNCTION_(), expr)
00454 # else
00455 # define XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, expr, msg) (1)
00456 # endif
00457
00458 # ifndef XCONTRACT_CUSTOM_REPORTER
00459 # define XCONTRACT_CUSTOM_REPORTER XCONTRACT_NS_QUAL(xContract_violationReport)
00460 # endif
00461
00462 # define XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(type, level, expr, msg) \
00463 \
00464 (((0 == XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, #expr, msg)) || (expr)) \
00465 ? stlsoft_static_cast(void, 0) \
00466 : XCONTRACT_NS_QUAL(xContract_contract_violation2)(__FILE__, __LINE__, XCONTRACT_GET_FUNCTION_(), #expr, msg, NULL, type, level, XCONTRACT_CUSTOM_REPORTER))
00467
00468 #endif
00469
00470
00471
00472
00479 #ifdef XCONTRACT_ENFORCING_UNEXPECTED_CONDITION
00480 # define XCONTRACT_ENFORCE_UNEXPECTED_CONDITION(msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_unexpectedCondition), 0, NULL, msg)
00481 #else
00482 # define XCONTRACT_ENFORCE_UNEXPECTED_CONDITION(msg) ((void)0)
00483 #endif
00484
00485
00486
00487
00488 #if 0
00489 # ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_LEVEL > 0
00490 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC(expr, msg, level) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 0, expr, msg)
00491 # else
00492 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC(expr, msg, level) ((void)0)
00493 # endif
00494 #endif
00495
00496 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0
00497 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 0, expr, msg)
00498 #else
00499 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_0(expr, msg) ((void)0)
00500 #endif
00501
00502 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1
00503 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 1, expr, msg)
00504 #else
00505 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_1(expr, msg) ((void)0)
00506 #endif
00507
00508 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2
00509 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 2, expr, msg)
00510 #else
00511 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_2(expr, msg) ((void)0)
00512 #endif
00513
00514 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3
00515 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 3, expr, msg)
00516 #else
00517 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_3(expr, msg) ((void)0)
00518 #endif
00519
00520 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4
00521 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 4, expr, msg)
00522 #else
00523 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_4(expr, msg) ((void)0)
00524 #endif
00525
00526
00527
00528
00529 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0
00530 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 0, expr, msg)
00531 #else
00532 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_0(expr, msg) ((void)0)
00533 #endif
00534
00535 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1
00536 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 1, expr, msg)
00537 #else
00538 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_1(expr, msg) ((void)0)
00539 #endif
00540
00541 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2
00542 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 2, expr, msg)
00543 #else
00544 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_2(expr, msg) ((void)0)
00545 #endif
00546
00547 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3
00548 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 3, expr, msg)
00549 #else
00550 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_3(expr, msg) ((void)0)
00551 #endif
00552
00553 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4
00554 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 4, expr, msg)
00555 #else
00556 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_4(expr, msg) ((void)0)
00557 #endif
00558
00559
00560
00561
00562 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0
00563 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 0, expr, msg)
00564 #else
00565 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_0(expr, msg) ((void)0)
00566 #endif
00567
00568 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1
00569 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 1, expr, msg)
00570 #else
00571 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_1(expr, msg) ((void)0)
00572 #endif
00573
00574 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2
00575 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 2, expr, msg)
00576 #else
00577 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_2(expr, msg) ((void)0)
00578 #endif
00579
00580 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3
00581 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 3, expr, msg)
00582 #else
00583 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_3(expr, msg) ((void)0)
00584 #endif
00585
00586 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4
00587 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 4, expr, msg)
00588 #else
00589 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_4(expr, msg) ((void)0)
00590 #endif
00591
00592
00593
00594
00595 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0
00596 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 0, expr, msg)
00597 #else
00598 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_0(expr, msg) ((void)0)
00599 #endif
00600
00601 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1
00602 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 1, expr, msg)
00603 #else
00604 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_1(expr, msg) ((void)0)
00605 #endif
00606
00607 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2
00608 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 2, expr, msg)
00609 #else
00610 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_2(expr, msg) ((void)0)
00611 #endif
00612
00613 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3
00614 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 3, expr, msg)
00615 #else
00616 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_3(expr, msg) ((void)0)
00617 #endif
00618
00619 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4
00620 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 4, expr, msg)
00621 #else
00622 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_4(expr, msg) ((void)0)
00623 #endif
00624
00625
00626
00627
00628 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0
00629 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 0, expr, msg)
00630 #else
00631 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_0(expr, msg) ((void)0)
00632 #endif
00633
00634 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1
00635 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 1, expr, msg)
00636 #else
00637 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_1(expr, msg) ((void)0)
00638 #endif
00639
00640 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2
00641 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 2, expr, msg)
00642 #else
00643 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_2(expr, msg) ((void)0)
00644 #endif
00645
00646 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3
00647 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 3, expr, msg)
00648 #else
00649 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_3(expr, msg) ((void)0)
00650 #endif
00651
00652 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4
00653 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 4, expr, msg)
00654 #else
00655 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_4(expr, msg) ((void)0)
00656 #endif
00657
00658
00659
00660
00661 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_0
00662 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 0, expr, msg)
00663 #else
00664 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_0(expr, msg) ((void)0)
00665 #endif
00666
00667 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_1
00668 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 1, expr, msg)
00669 #else
00670 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_1(expr, msg) ((void)0)
00671 #endif
00672
00673 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_2
00674 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 2, expr, msg)
00675 #else
00676 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_2(expr, msg) ((void)0)
00677 #endif
00678
00679 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_3
00680 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 3, expr, msg)
00681 #else
00682 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_3(expr, msg) ((void)0)
00683 #endif
00684
00685 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_4
00686 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 4, expr, msg)
00687 #else
00688 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_4(expr, msg) ((void)0)
00689 #endif
00690
00691
00692
00693
00694 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0
00695 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 0, expr, msg)
00696 #else
00697 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_0(expr, msg) ((void)0)
00698 #endif
00699
00700 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1
00701 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 1, expr, msg)
00702 #else
00703 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_1(expr, msg) ((void)0)
00704 #endif
00705
00706 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2
00707 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 2, expr, msg)
00708 #else
00709 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_2(expr, msg) ((void)0)
00710 #endif
00711
00712 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3
00713 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 3, expr, msg)
00714 #else
00715 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_3(expr, msg) ((void)0)
00716 #endif
00717
00718 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4
00719 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 4, expr, msg)
00720 #else
00721 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_4(expr, msg) ((void)0)
00722 #endif
00723
00724
00725
00726
00727 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_0
00728 # define XCONTRACT_ENFORCE_STATIC_DATA_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 0, expr, msg)
00729 #else
00730 # define XCONTRACT_ENFORCE_STATIC_DATA_0(expr, msg) ((void)0)
00731 #endif
00732
00733 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_1
00734 # define XCONTRACT_ENFORCE_STATIC_DATA_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 1, expr, msg)
00735 #else
00736 # define XCONTRACT_ENFORCE_STATIC_DATA_1(expr, msg) ((void)0)
00737 #endif
00738
00739 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_2
00740 # define XCONTRACT_ENFORCE_STATIC_DATA_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 2, expr, msg)
00741 #else
00742 # define XCONTRACT_ENFORCE_STATIC_DATA_2(expr, msg) ((void)0)
00743 #endif
00744
00745 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_3
00746 # define XCONTRACT_ENFORCE_STATIC_DATA_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 3, expr, msg)
00747 #else
00748 # define XCONTRACT_ENFORCE_STATIC_DATA_3(expr, msg) ((void)0)
00749 #endif
00750
00751 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_4
00752 # define XCONTRACT_ENFORCE_STATIC_DATA_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 4, expr, msg)
00753 #else
00754 # define XCONTRACT_ENFORCE_STATIC_DATA_4(expr, msg) ((void)0)
00755 #endif
00756
00757
00758
00759
00760 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_0
00761 # define XCONTRACT_ENFORCE_ASSUMPTION_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 0, expr, msg)
00762 #else
00763 # define XCONTRACT_ENFORCE_ASSUMPTION_0(expr, msg) ((void)0)
00764 #endif
00765
00766 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_1
00767 # define XCONTRACT_ENFORCE_ASSUMPTION_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 1, expr, msg)
00768 #else
00769 # define XCONTRACT_ENFORCE_ASSUMPTION_1(expr, msg) ((void)0)
00770 #endif
00771
00772 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_2
00773 # define XCONTRACT_ENFORCE_ASSUMPTION_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 2, expr, msg)
00774 #else
00775 # define XCONTRACT_ENFORCE_ASSUMPTION_2(expr, msg) ((void)0)
00776 #endif
00777
00778 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_3
00779 # define XCONTRACT_ENFORCE_ASSUMPTION_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 3, expr, msg)
00780 #else
00781 # define XCONTRACT_ENFORCE_ASSUMPTION_3(expr, msg) ((void)0)
00782 #endif
00783
00784 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_4
00785 # define XCONTRACT_ENFORCE_ASSUMPTION_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 4, expr, msg)
00786 #else
00787 # define XCONTRACT_ENFORCE_ASSUMPTION_4(expr, msg) ((void)0)
00788 #endif
00789
00790
00791
00792
00793
00806 XCONTRACT_CALL(int) xContract_isConditionVerified( xContract_violation_type_t type
00807 , int level
00808 , char const* file
00809 , unsigned line
00810 , char const* function
00811 , char const* expression);
00812
00813
00814
00815
00816
00817 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00818 XCONTRACT_CALL(int) xContract_doWhileCondition(char const* );
00819 #endif
00820
00838 XCONTRACT_CALL(void) xContract_violationReport( char const *file
00839 , unsigned line
00840 , char const *function
00841 , char const *expression
00842 , char const *message
00843 , char const *qualifier
00844 , xContract_violation_type_t type
00845 , int level);
00846
00858 XCONTRACT_NORETURN
00859 XCONTRACT_CALL(void) xContract_contract_violation( char const* file
00860 , unsigned line
00861 , char const* expression
00862 , char const* message
00863 , xContract_violation_type_t type);
00864
00882 XCONTRACT_NORETURN
00883 XCONTRACT_CALL(void) xContract_contract_violation2( char const* file
00884 , unsigned line
00885 , char const* function
00886 , char const* expression
00887 , char const* message
00888 , char const* qualifier
00889 , xContract_violation_type_t type
00890 , int level
00891 , xContract_violationReport_fn_t pfnReport);
00892
00899 XCONTRACT_CALL(char const*) xContract_getViolationTypeString(xContract_violation_type_t type);
00900
00907 XCONTRACT_CALL(size_t) xContract_getViolationTypeStringLength(xContract_violation_type_t type);
00908
00909
00910
00911
00912
00913 #ifndef _XCONTRACT_NO_NAMESPACE
00914
00915 typedef xContract_violation_type_t violation_type_t;
00916 typedef xContract_violationReport_fn_t violationReport_fn_t;
00917
00918 }
00919 #endif
00920
00921
00922
00923 #endif
00924
00925