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 5
00053 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_REVISION 4
00054 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_EDIT 181
00055 #endif
00056
00057
00058
00059
00060
00075 #define XCONTRACT_VER_MAJOR 0
00076 #define XCONTRACT_VER_MINOR 3
00077 #define XCONTRACT_VER_REVISION 7
00078
00079 #define XCONTRACT_VER 0x000307ff
00080
00081
00082
00083
00084
00085 #ifdef __cplusplus
00086 # if defined(UNIX) || \
00087 defined(unix) || \
00088 defined(unix__) || \
00089 defined(__unix) || \
00090 defined(__unix__)
00091
00092
00093
00094
00095
00096 # include <unixstl/synch/util/features.h>
00097 # endif
00098 #endif
00099
00100 #include <stddef.h>
00101
00102
00103
00104
00105
00106 #if defined(_STLSOFT_NO_NAMESPACE) || \
00107 !defined(__cplusplus)
00108 # define _XCONTRACT_NO_NAMESPACE
00109 #endif
00110
00111 #ifndef _XCONTRACT_NO_NAMESPACE
00112
00116 namespace xcontract
00117 {
00118 #endif
00119
00120
00121
00122
00123
00143
00144
00145
00146
00147 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00148
00149
00150 # ifdef __cplusplus
00151 # define XCONTRACT_STATIC_CAST_(t, v) static_cast< t>(v)
00152 # else
00153 # define XCONTRACT_STATIC_CAST_(t, v) (t)(v)
00154 # endif
00155
00156
00157 # if defined(__BORLANDC__)
00158 # elif defined(__COMO__)
00159 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00160 # elif defined(__DMC__)
00161 # if __DMC__ >= 0x850
00162 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00163 # endif
00164 # elif defined(__INTEL_COMPILER)
00165 # if __INTEL_COMPILER >= 700
00166 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00167 # endif
00168 # elif defined(__MWERKS__)
00169 # if (__MWERKS__ & 0xFF00) >= 0x3000
00170 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00171 # endif
00172 # elif defined(__WATCOMC__)
00173 # if __WATCOMC__ >= 1240
00174 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00175 # endif
00176 # elif defined(__GNUC___)
00177 # if __GNUC___ >= 3
00178 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00179 # endif
00180 # elif defined(__SUNPRO_C)
00181 # define XCONTRACT_PPF_func_SYMBOL_SUPPORT
00182 # elif defined(__SUNPRO_CC)
00183 # define XCONTRACT_PPF_func_SYMBOL_SUPPORT
00184 # elif defined(_MSC_VER)
00185 # if _MSC_VER >= 1200
00186 # define XCONTRACT_PPF_DECLSPEC_NORETURN_SYMBOL_SUPPORT
00187 # endif
00188 # if _MSC_VER >= 1300
00189 # define XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00190 # endif
00191 # endif
00192
00193 #endif
00194
00195
00196
00197
00198
00199 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00200
00201 # if !defined(XCONTRACT_DECLSPEC)
00202 # define XCONTRACT_DECLSPEC
00203 # endif
00204
00205 # if defined(__cplusplus) || \
00206 defined(XCONTRACT_DOCUMENTATION_SKIP_SECTION)
00207 # define XCONTRACT_EXTERN_C extern "C"
00208 # else
00209 # define XCONTRACT_EXTERN_C extern
00210 # endif
00211
00212 # if !defined(XCONTRACT_CALLCONV)
00213 # define XCONTRACT_CALLCONV
00214 # endif
00215
00216 # define XCONTRACT_CALL(rt) XCONTRACT_DECLSPEC XCONTRACT_EXTERN_C rt XCONTRACT_CALLCONV
00217
00218 # ifdef XCONTRACT_PPF_FUNCTION_SYMBOL_SUPPORT
00219 # define XCONTRACT_GET_FUNCTION_() __FUNCTION__
00220 # elif defined(XCONTRACT_PPF_func_SYMBOL_SUPPORT)
00221 # define XCONTRACT_GET_FUNCTION_() __func__
00222 # else
00223 # define XCONTRACT_GET_FUNCTION_() XCONTRACT_STATIC_CAST_(char const*, 0)
00224 # endif
00225
00226 # ifndef _XCONTRACT_NO_NAMESPACE
00227 # define XCONTRACT_NS_QUAL(sym) xcontract::sym
00228 # else
00229 # define XCONTRACT_NS_QUAL(sym) sym
00230 # endif
00231
00232 # ifdef XCONTRACT_PPF_DECLSPEC_NORETURN_SYMBOL_SUPPORT
00233 # define XCONTRACT_NORETURN __declspec(noreturn)
00234 # else
00235 # define XCONTRACT_NORETURN
00236 # endif
00237
00238 #endif
00239
00240
00241
00242
00243
00244
00245
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259
00260
00261
00262
00263
00264
00265
00266
00267
00268
00269
00270
00271
00272
00273
00274
00275
00276
00277
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288
00289
00290
00291
00292
00293
00294
00295
00296
00297 #if !defined(XCONTRACT_NO_STOCK_MODES) && \
00298 !defined(XCONTRACT_DOCUMENTATION_SKIP_SECTION)
00299
00300 # if !defined(XCONTRACT_MODE_DEBUG) && \
00301 !defined(XCONTRACT_MODE_TEST) && \
00302 !defined(XCONTRACT_MODE_RELEASE) && \
00303 !defined(XCONTRACT_MODE_OFF)
00304
00305
00306
00307 # if !defined(NDEBUG)
00308 # define XCONTRACT_MODE_DEBUG
00309 # else
00310 # define XCONTRACT_MODE_RELEASE
00311 # endif
00312 # endif
00313
00314 # if defined(XCONTRACT_MODE_DEBUG)
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_POSTCONDITION_PARAMETERS_0 (1)
00338 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1 (1)
00339 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2 (1)
00340 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3 (1)
00341 # define XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4 (1)
00342 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_0 (1)
00343 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_1 (1)
00344 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_2 (1)
00345 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_3 (1)
00346 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_4 (1)
00347 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 (1)
00348 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 (1)
00349 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 (1)
00350 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 (1)
00351 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 (1)
00352 # define XCONTRACT_ENFORCING_STATIC_DATA_0 (1)
00353 # define XCONTRACT_ENFORCING_STATIC_DATA_1 (1)
00354 # define XCONTRACT_ENFORCING_STATIC_DATA_2 (1)
00355 # define XCONTRACT_ENFORCING_STATIC_DATA_3 (1)
00356 # define XCONTRACT_ENFORCING_STATIC_DATA_4 (1)
00357 # define XCONTRACT_ENFORCING_ASSUMPTION_0 (1)
00358 # define XCONTRACT_ENFORCING_ASSUMPTION_1 (1)
00359 # define XCONTRACT_ENFORCING_ASSUMPTION_2 (1)
00360 # define XCONTRACT_ENFORCING_ASSUMPTION_3 (1)
00361 # define XCONTRACT_ENFORCING_ASSUMPTION_4 (1)
00362 # endif
00363
00364 # if defined(XCONTRACT_MODE_TEST)
00365
00366 # define XCONTRACT_ENFORCING_UNEXPECTED_CONDITION (1)
00367 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 (1)
00368 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 (1)
00369 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 (1)
00370 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 (1)
00371 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 (1)
00372 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 (1)
00373 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 (1)
00374 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 (1)
00375 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 (1)
00376 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 (1)
00377 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 (1)
00378 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 (1)
00379 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 (1)
00380 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 (1)
00381 # define XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 (1)
00382 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 (1)
00383 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 (1)
00384 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 (1)
00385 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 (1)
00386 # define XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 (1)
00387 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_0 (1)
00388 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_1 (1)
00389 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_2 (1)
00390 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_3 (1)
00391 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_4 (1)
00392 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 (1)
00393 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 (1)
00394 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 (1)
00395 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 (1)
00396 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 (1)
00397 # define XCONTRACT_ENFORCING_STATIC_DATA_0 (1)
00398 # define XCONTRACT_ENFORCING_STATIC_DATA_1 (1)
00399 # define XCONTRACT_ENFORCING_STATIC_DATA_2 (1)
00400 # define XCONTRACT_ENFORCING_STATIC_DATA_3 (1)
00401 # define XCONTRACT_ENFORCING_STATIC_DATA_4 (1)
00402 # define XCONTRACT_ENFORCING_ASSUMPTION_0 (1)
00403 # define XCONTRACT_ENFORCING_ASSUMPTION_1 (1)
00404 # define XCONTRACT_ENFORCING_ASSUMPTION_2 (1)
00405 # define XCONTRACT_ENFORCING_ASSUMPTION_3 (1)
00406 # define XCONTRACT_ENFORCING_ASSUMPTION_4 (1)
00407 # endif
00408
00409 # if defined(XCONTRACT_MODE_RELEASE)
00410
00411 # define XCONTRACT_ENFORCING_UNEXPECTED_CONDITION (1)
00412 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 (1)
00413 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 (1)
00414 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 (1)
00415 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 (1)
00416 # define XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 (1)
00417 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 (1)
00418 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 (1)
00419 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 (1)
00420 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 (1)
00421 # define XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 (1)
00422 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_0 (1)
00423 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_1 (1)
00424 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_2 (1)
00425 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_3 (1)
00426 # define XCONTRACT_ENFORCING_CLASS_INVARIANT_4 (1)
00427 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 (1)
00428 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 (1)
00429 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 (1)
00430 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 (1)
00431 # define XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 (1)
00432 # define XCONTRACT_ENFORCING_STATIC_DATA_0 (1)
00433 # define XCONTRACT_ENFORCING_STATIC_DATA_1 (1)
00434 # define XCONTRACT_ENFORCING_STATIC_DATA_2 (1)
00435 # define XCONTRACT_ENFORCING_STATIC_DATA_3 (1)
00436 # define XCONTRACT_ENFORCING_STATIC_DATA_4 (1)
00437 # endif
00438
00439 # if defined(XCONTRACT_MODE_OFF)
00440
00441 # endif
00442
00443
00444 #endif
00445
00446
00447
00448
00449
00454 enum xContract_violation_type_t
00455 {
00456 xContract_unexpectedCondition
00457 , xContract_precondition_logic
00458 , xContract_precondition_parameters
00459 , xContract_postcondition_returnValue
00460 , xContract_postcondition_logic
00461 , xContract_postcondition_parameters
00462 , xContract_invariant_class
00463 , xContract_invariant_global
00464 , xContract_staticData
00465 , xContract_intermediateAssumption
00467 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00468 , xContract_maximum_value
00469 #endif
00470 };
00471 #ifndef __cplusplus
00472 typedef enum xContract_violation_type_t xContract_violation_type_t;
00473 #endif
00474 #ifndef _XCONTRACT_NO_NAMESPACE
00475
00477 typedef xContract_violation_type_t violation_type_t;
00478 #endif
00479
00482 typedef void (XCONTRACT_CALLCONV *xContract_violationReport_fn_t)(
00483 char const* file
00484 , unsigned line
00485 , char const* function
00486 , char const* expression
00487 , char const* message
00488 , char const* qualifier
00489 , xContract_violation_type_t type
00490 , int level
00491 );
00492
00493 #ifndef _XCONTRACT_NO_NAMESPACE
00494
00496 typedef xContract_violationReport_fn_t violationReport_fn_t;
00497 #endif
00498
00499
00500
00501
00502
00503
00504
00505
00506
00507
00508
00509
00510 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00511
00512 # ifdef XCONTRACT_VERIFY_CONDITION_AT_RUNTIME
00513 # define XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, expr, msg) XCONTRACT_NS_QUAL(xContract_isConditionVerified)(type, level, __FILE__, __LINE__, XCONTRACT_GET_FUNCTION_(), expr)
00514 # else
00515 # define XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, expr, msg) (1)
00516 # endif
00517
00518 # ifndef XCONTRACT_CUSTOM_REPORTER
00519 # define XCONTRACT_CUSTOM_REPORTER XCONTRACT_NS_QUAL(xContract_violationReport)
00520 # endif
00521
00522 # define XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(type, level, expr, msg) \
00523 \
00524 (((0 == XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, #expr, msg)) || (expr)) \
00525 ? XCONTRACT_STATIC_CAST_(void, 0) \
00526 : XCONTRACT_NS_QUAL(xContract_contract_violation2)(__FILE__, __LINE__, XCONTRACT_GET_FUNCTION_(), #expr, msg, NULL, type, level, XCONTRACT_CUSTOM_REPORTER))
00527
00528 #endif
00529
00530
00531
00532
00541 #ifdef XCONTRACT_ENFORCING_UNEXPECTED_CONDITION
00542 # define XCONTRACT_ENFORCE_UNEXPECTED_CONDITION(msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_unexpectedCondition), 0, NULL, msg)
00543 #else
00544 # define XCONTRACT_ENFORCE_UNEXPECTED_CONDITION(msg) ((void)0)
00545 #endif
00546
00547
00548
00549
00550 #if 0
00551 # ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_LEVEL > 0
00552 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC(expr, msg, level) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 0, expr, msg)
00553 # else
00554 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC(expr, msg, level) ((void)0)
00555 # endif
00556 #endif
00557
00567 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0
00568 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 0, expr, msg)
00569 #else
00570 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_0(expr, msg) ((void)0)
00571 #endif
00572
00582 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1
00583 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 1, expr, msg)
00584 #else
00585 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_1(expr, msg) ((void)0)
00586 #endif
00587
00597 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2
00598 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 2, expr, msg)
00599 #else
00600 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_2(expr, msg) ((void)0)
00601 #endif
00602
00612 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3
00613 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 3, expr, msg)
00614 #else
00615 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_3(expr, msg) ((void)0)
00616 #endif
00617
00627 #ifdef XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4
00628 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_logic), 4, expr, msg)
00629 #else
00630 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_4(expr, msg) ((void)0)
00631 #endif
00632
00633
00634
00635
00645 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0
00646 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 0, expr, msg)
00647 #else
00648 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_0(expr, msg) ((void)0)
00649 #endif
00650
00660 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1
00661 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 1, expr, msg)
00662 #else
00663 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_1(expr, msg) ((void)0)
00664 #endif
00665
00675 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2
00676 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 2, expr, msg)
00677 #else
00678 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_2(expr, msg) ((void)0)
00679 #endif
00680
00690 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3
00691 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 3, expr, msg)
00692 #else
00693 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_3(expr, msg) ((void)0)
00694 #endif
00695
00705 #ifdef XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4
00706 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_precondition_parameters), 4, expr, msg)
00707 #else
00708 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_4(expr, msg) ((void)0)
00709 #endif
00710
00711
00712
00713
00723 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0
00724 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 0, expr, msg)
00725 #else
00726 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_0(expr, msg) ((void)0)
00727 #endif
00728
00738 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1
00739 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 1, expr, msg)
00740 #else
00741 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_1(expr, msg) ((void)0)
00742 #endif
00743
00753 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2
00754 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 2, expr, msg)
00755 #else
00756 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_2(expr, msg) ((void)0)
00757 #endif
00758
00768 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3
00769 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 3, expr, msg)
00770 #else
00771 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_3(expr, msg) ((void)0)
00772 #endif
00773
00783 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4
00784 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_returnValue), 4, expr, msg)
00785 #else
00786 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_4(expr, msg) ((void)0)
00787 #endif
00788
00789
00790
00791
00801 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0
00802 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 0, expr, msg)
00803 #else
00804 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_0(expr, msg) ((void)0)
00805 #endif
00806
00816 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1
00817 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 1, expr, msg)
00818 #else
00819 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_1(expr, msg) ((void)0)
00820 #endif
00821
00831 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2
00832 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 2, expr, msg)
00833 #else
00834 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_2(expr, msg) ((void)0)
00835 #endif
00836
00846 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3
00847 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 3, expr, msg)
00848 #else
00849 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_3(expr, msg) ((void)0)
00850 #endif
00851
00861 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4
00862 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_logic), 4, expr, msg)
00863 #else
00864 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_4(expr, msg) ((void)0)
00865 #endif
00866
00867
00868
00869
00879 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0
00880 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 0, expr, msg)
00881 #else
00882 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_0(expr, msg) ((void)0)
00883 #endif
00884
00894 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1
00895 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 1, expr, msg)
00896 #else
00897 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_1(expr, msg) ((void)0)
00898 #endif
00899
00909 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2
00910 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 2, expr, msg)
00911 #else
00912 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_2(expr, msg) ((void)0)
00913 #endif
00914
00924 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3
00925 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 3, expr, msg)
00926 #else
00927 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_3(expr, msg) ((void)0)
00928 #endif
00929
00939 #ifdef XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4
00940 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_postcondition_parameters), 4, expr, msg)
00941 #else
00942 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_4(expr, msg) ((void)0)
00943 #endif
00944
00945
00946
00947
00957 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_0
00958 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 0, expr, msg)
00959 #else
00960 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_0(expr, msg) ((void)0)
00961 #endif
00962
00972 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_1
00973 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 1, expr, msg)
00974 #else
00975 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_1(expr, msg) ((void)0)
00976 #endif
00977
00987 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_2
00988 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 2, expr, msg)
00989 #else
00990 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_2(expr, msg) ((void)0)
00991 #endif
00992
01002 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_3
01003 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 3, expr, msg)
01004 #else
01005 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_3(expr, msg) ((void)0)
01006 #endif
01007
01017 #ifdef XCONTRACT_ENFORCING_CLASS_INVARIANT_4
01018 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_class), 4, expr, msg)
01019 #else
01020 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_4(expr, msg) ((void)0)
01021 #endif
01022
01023
01024
01025
01035 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0
01036 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 0, expr, msg)
01037 #else
01038 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_0(expr, msg) ((void)0)
01039 #endif
01040
01050 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1
01051 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 1, expr, msg)
01052 #else
01053 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_1(expr, msg) ((void)0)
01054 #endif
01055
01065 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2
01066 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 2, expr, msg)
01067 #else
01068 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_2(expr, msg) ((void)0)
01069 #endif
01070
01080 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3
01081 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 3, expr, msg)
01082 #else
01083 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_3(expr, msg) ((void)0)
01084 #endif
01085
01095 #ifdef XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4
01096 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_invariant_global), 4, expr, msg)
01097 #else
01098 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_4(expr, msg) ((void)0)
01099 #endif
01100
01101
01102
01103
01113 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_0
01114 # define XCONTRACT_ENFORCE_STATIC_DATA_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 0, expr, msg)
01115 #else
01116 # define XCONTRACT_ENFORCE_STATIC_DATA_0(expr, msg) ((void)0)
01117 #endif
01118
01128 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_1
01129 # define XCONTRACT_ENFORCE_STATIC_DATA_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 1, expr, msg)
01130 #else
01131 # define XCONTRACT_ENFORCE_STATIC_DATA_1(expr, msg) ((void)0)
01132 #endif
01133
01143 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_2
01144 # define XCONTRACT_ENFORCE_STATIC_DATA_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 2, expr, msg)
01145 #else
01146 # define XCONTRACT_ENFORCE_STATIC_DATA_2(expr, msg) ((void)0)
01147 #endif
01148
01158 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_3
01159 # define XCONTRACT_ENFORCE_STATIC_DATA_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 3, expr, msg)
01160 #else
01161 # define XCONTRACT_ENFORCE_STATIC_DATA_3(expr, msg) ((void)0)
01162 #endif
01163
01173 #ifdef XCONTRACT_ENFORCING_STATIC_DATA_4
01174 # define XCONTRACT_ENFORCE_STATIC_DATA_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_staticData), 4, expr, msg)
01175 #else
01176 # define XCONTRACT_ENFORCE_STATIC_DATA_4(expr, msg) ((void)0)
01177 #endif
01178
01179
01180
01181
01191 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_0
01192 # define XCONTRACT_ENFORCE_ASSUMPTION_0(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 0, expr, msg)
01193 #else
01194 # define XCONTRACT_ENFORCE_ASSUMPTION_0(expr, msg) ((void)0)
01195 #endif
01196
01206 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_1
01207 # define XCONTRACT_ENFORCE_ASSUMPTION_1(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 1, expr, msg)
01208 #else
01209 # define XCONTRACT_ENFORCE_ASSUMPTION_1(expr, msg) ((void)0)
01210 #endif
01211
01221 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_2
01222 # define XCONTRACT_ENFORCE_ASSUMPTION_2(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 2, expr, msg)
01223 #else
01224 # define XCONTRACT_ENFORCE_ASSUMPTION_2(expr, msg) ((void)0)
01225 #endif
01226
01236 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_3
01237 # define XCONTRACT_ENFORCE_ASSUMPTION_3(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 3, expr, msg)
01238 #else
01239 # define XCONTRACT_ENFORCE_ASSUMPTION_3(expr, msg) ((void)0)
01240 #endif
01241
01251 #ifdef XCONTRACT_ENFORCING_ASSUMPTION_4
01252 # define XCONTRACT_ENFORCE_ASSUMPTION_4(expr, msg) XCONTRACT_ENFORCE_CONDITION_TYPE_LEVEL_(XCONTRACT_NS_QUAL(xContract_intermediateAssumption), 4, expr, msg)
01253 #else
01254 # define XCONTRACT_ENFORCE_ASSUMPTION_4(expr, msg) ((void)0)
01255 #endif
01256
01257
01258
01259
01260
01278 XCONTRACT_CALL(int) xContract_isConditionVerified(
01279 xContract_violation_type_t type
01280 , int level
01281 , char const* file
01282 , unsigned line
01283 , char const* function
01284 , char const* expression
01285 );
01286
01287
01288
01289
01290
01291 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
01292 XCONTRACT_CALL(int) xContract_doWhileCondition(char const* );
01293 #endif
01294
01318 XCONTRACT_CALL(void) xContract_violationReport(
01319 char const *file
01320 , unsigned line
01321 , char const *function
01322 , char const *expression
01323 , char const *message
01324 , char const *qualifier
01325 , xContract_violation_type_t type
01326 , int level
01327 );
01328
01340 XCONTRACT_NORETURN
01341 XCONTRACT_CALL(void) xContract_contract_violation(
01342 char const* file
01343 , unsigned line
01344 , char const* expression
01345 , char const* message
01346 , xContract_violation_type_t type
01347 );
01348
01366 XCONTRACT_NORETURN
01367 XCONTRACT_CALL(void) xContract_contract_violation2(
01368 char const* file
01369 , unsigned line
01370 , char const* function
01371 , char const* expression
01372 , char const* message
01373 , char const* qualifier
01374 , xContract_violation_type_t type
01375 , int level
01376 , xContract_violationReport_fn_t pfnReport
01377 );
01378
01385 XCONTRACT_CALL(char const*) xContract_getViolationTypeString(xContract_violation_type_t type);
01386
01393 XCONTRACT_CALL(size_t) xContract_getViolationTypeStringLength(xContract_violation_type_t type);
01394
01395
01396
01397
01398
01399 #ifdef __cplusplus
01400 inline char const* c_str_data_a(xContract_violation_type_t type)
01401 {
01402 return xContract_getViolationTypeString(type);
01403 }
01404 inline size_t c_str_len_a(xContract_violation_type_t type)
01405 {
01406 return xContract_getViolationTypeStringLength(type);
01407 }
01408 inline char const* c_str_ptr_a(xContract_violation_type_t type)
01409 {
01410 return xContract_getViolationTypeString(type);
01411 }
01412 #endif
01413
01414
01415
01416
01417
01418 #ifndef _XCONTRACT_NO_NAMESPACE
01419 }
01420 #endif
01421
01422 #if !defined(_STLSOFT_NO_NAMESPACE) && \
01423 defined(__cplusplus)
01424 namespace stlsoft
01425 {
01426
01427 # ifndef _XCONTRACT_NO_NAMESPACE
01428 using ::xcontract::c_str_data_a;
01429 using ::xcontract::c_str_len_a;
01430 using ::xcontract::c_str_ptr_a;
01431 # else
01432 using ::c_str_data_a;
01433 using ::c_str_len_a;
01434 using ::c_str_ptr_a;
01435 # endif
01436
01437 }
01438 #endif
01439
01440
01441
01442 #endif
01443
01444