Synesis Software STLSoft - ... Robust, Lightweight, Cross-platform, Template Software ...

xcontract/xcontract.h

Go to the documentation of this file.
00001 /* /////////////////////////////////////////////////////////////////////////
00002  * File:        xcontract/xcontract.h (formerly part of Synesis' internal test codebase)
00003  *
00004  * Purpose:     Main header file for the xContract library.
00005  *
00006  * Created:     2nd January 2001
00007  * Updated:     28th September 2008
00008  *
00009  * Home:        http://stlsoft.org/
00010  *
00011  * Copyright (c) 2001-2008, Matthew Wilson and Synesis Software
00012  * All rights reserved.
00013  *
00014  * Redistribution and use in source and binary forms, with or without
00015  * modification, are permitted provided that the following conditions are
00016  * met:
00017  *
00018  * - Redistributions of source code must retain the above copyright notice,
00019  *   this list of conditions and the following disclaimer.
00020  * - Redistributions in binary form must reproduce the above copyright
00021  *   notice, this list of conditions and the following disclaimer in the
00022  *   documentation and/or other materials provided with the distribution.
00023  * - Neither the name(s) of Matthew Wilson and Synesis Software nor the
00024  *   names of any contributors may be used to endorse or promote products
00025  *   derived from this software without specific prior written permission.
00026  *
00027  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00028  * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
00029  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00030  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
00031  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00032  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00033  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00034  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00035  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00036  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00037  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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 /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00056 
00057 /* /////////////////////////////////////////////////////////////////////////
00058  * Version information
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  * Includes
00083  */
00084 
00085 #ifndef STLSOFT_INCL_STLSOFT_H_STLSOFT
00086 # include <stlsoft/stlsoft.h>
00087 #endif /* !STLSOFT_INCL_STLSOFT_H_STLSOFT */
00088 
00089 #ifdef __cplusplus
00090 # if defined(UNIX) || \
00091      defined(unix) || \
00092      defined(unix__) || \
00093      defined(__unix) || \
00094      defined(__unix__)
00095  /* We include threading.h to prevent the definition of _REENTRANT standard
00096   * headers on some UNIX operating systems from confusing the feature
00097   * discrimination in UNIXSTL and having it think that we're multithreading
00098   * when we're not.
00099   */
00100 #  include <unixstl/synch/util/features.h>
00101 # endif /* UNIX */
00102 # if defined(STLSOFT_CF_EXCEPTION_SUPPORT)
00103 #  include <new>
00104 #  include <stdexcept>
00105 # endif /* STLSOFT_CF_EXCEPTION_SUPPORT */
00106 #endif /* __cplusplus */
00107 
00108 /* /////////////////////////////////////////////////////////////////////////
00109  * Compatibility
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 /* _STLSOFT_VER */
00115 
00116 /* /////////////////////////////////////////////////////////////////////////
00117  * Namespace
00118  */
00119 
00120 #if defined(_STLSOFT_NO_NAMESPACE)
00121 # define _XCONTRACT_NO_NAMESPACE
00122 #endif /* _STLSOFT_NO_NAMESPACE */
00123 
00124 #ifndef _XCONTRACT_NO_NAMESPACE
00125 
00129 namespace xcontract
00130 {
00131 #endif /* !_XCONTRACT_NO_NAMESPACE */
00132 
00133 /* /////////////////////////////////////////////////////////////////////////
00134  * Documentation
00135  */
00136 
00146 /* /////////////////////////////////////////////////////////////////////////
00147  * Features
00148  */
00149 
00150 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00151 
00152 # if !defined(XCONTRACT_DECLSPEC)
00153 #  define XCONTRACT_DECLSPEC
00154 # endif /* !XCONTRACT_DECLSPEC */
00155 
00156 # if defined(__cplusplus) || \
00157      defined(XCONTRACT_DOCUMENTATION_SKIP_SECTION)
00158 #  define XCONTRACT_EXTERN_C                    extern "C"
00159 # else /* ? __cplusplus */
00160 #  define XCONTRACT_EXTERN_C                    extern
00161 # endif /* !__cplusplus */
00162 
00163 # if !defined(XCONTRACT_CALLCONV)
00164 #  define XCONTRACT_CALLCONV
00165 # endif /* !XCONTRACT_CALLCONV */
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 /* ? STLSOFT_CF_FUNCTION_SYMBOL_SUPPORT */
00172 #  define XCONTRACT_GET_FUNCTION_()             stlsoft_static_cast(char const*, 0)
00173 # endif /* STLSOFT_CF_FUNCTION_SYMBOL_SUPPORT */
00174 
00175 # ifndef _XCONTRACT_NO_NAMESPACE
00176 #  define XCONTRACT_NS_QUAL(sym)                xcontract::sym
00177 # else /* ? _XCONTRACT_NO_NAMESPACE */
00178 #  define XCONTRACT_NS_QUAL(sym)                sym
00179 # endif /* _XCONTRACT_NO_NAMESPACE */
00180 
00181 
00182 # if defined(STLSOFT_COMPILER_IS_MSVC) && \
00183      _MSC_VER >= 1200
00184 #  define XCONTRACT_NORETURN                    __declspec(noreturn)
00185 # else /* ? compiler */
00186 #  define XCONTRACT_NORETURN
00187 # endif /* compiler */
00188 
00189 #endif /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00190 
00191 /* /////////////////////////////////////////////////////////////////////////
00192  * Modes:
00193  *
00194  *  - Debug:
00195  *      - pre-condition
00196  *          - logic             - on
00197  *          - parameters        - on
00198  *      - post-condition
00199  *          - logic             - on
00200  *          - ret val           - on
00201  *          - out parameters    - on
00202  *      - invariant
00203  *          - class             - on
00204  *          - global            - on
00205  *      - unexpected condition  - on
00206  *
00207  *  - Test:
00208  *      - pre-condition
00209  *          - logic             - on
00210  *          - parameters        - on
00211  *      - post-condition
00212  *          - logic             - on
00213  *          - ret val           - on
00214  *          - out parameters    - off
00215  *      - invariant
00216  *          - class             - on
00217  *          - global            - on
00218  *      - unexpected condition  - on
00219  *
00220  *  - Release:
00221  *      - pre-condition
00222  *          - logic             - on
00223  *          - parameters        - on
00224  *      - post-condition
00225  *          - logic             - off
00226  *          - ret val           - off
00227  *          - out parameters    - off
00228  *      - invariant
00229  *          - class             - on
00230  *          - global            - on
00231  *      - unexpected condition  - on
00232  *
00233  *  - Off:
00234  *      - pre-condition
00235  *          - logic             - off
00236  *          - parameters        - off
00237  *      - post-condition
00238  *          - logic             - off
00239  *          - ret val           - off
00240  *          - out parameters    - off
00241  *      - invariant
00242  *          - class             - off
00243  *          - global            - off
00244  *      - unexpected condition  - off
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   /* No mode specified, so we deduce from presence/absence of debug
00255    * symbols
00256    */
00257 #  if !defined(NDEBUG)
00258 #   define XCONTRACT_MODE_DEBUG
00259 #  else /* ? NDEBUG */
00260 #   define XCONTRACT_MODE_RELEASE
00261 #  endif /* NDEBUG */
00262 # endif /* XCONTRACT_MODE_???? */
00263 
00264 # if defined(XCONTRACT_MODE_DEBUG)
00265    /* Everything is on in Debug */
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 /* XCONTRACT_MODE_DEBUG */
00313 
00314 # if defined(XCONTRACT_MODE_TEST)
00315    /* Everything except postcondition out-parameters is on in Test */
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 /* XCONTRACT_MODE_TEST */
00358 
00359 # if defined(XCONTRACT_MODE_RELEASE)
00360    /* Everything except postconditions and intermediate assumptions are on in Release */
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 /* XCONTRACT_MODE_RELEASE */
00388 
00389 # if defined(XCONTRACT_MODE_OFF)
00390    /* Nothing is on in Off */
00391 # endif /* XCONTRACT_MODE_OFF */
00392 
00393 
00394 #endif /* !XCONTRACT_NO_STOCK_MODES */
00395 
00396 /* /////////////////////////////////////////////////////////////////////////
00397  * Types
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 /* !__cplusplus */
00422 #ifndef _XCONTRACT_NO_NAMESPACE
00423 typedef enum xContract_violation_type_t         violation_type_t;
00424 #endif /* !_XCONTRACT_NO_NAMESPACE */
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 /* !_XCONTRACT_NO_NAMESPACE */
00438 
00439 /* /////////////////////////////////////////////////////////////////////////
00440  * Macros
00441  *
00442  * NOTE: These macro names are deliberately unappealingly large, so that
00443  * you'll be motivated to define your own, company/project-specific macros,
00444  * that do exactly what you want, rather than the very general facilities
00445  * provided here.
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 /* ? XCONTRACT_VERIFY_CONDITION_AT_RUNTIME */
00455 #  define XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, expr, msg)     (1)
00456 # endif /* XCONTRACT_VERIFY_CONDITION_AT_RUNTIME */
00457 
00458 # ifndef XCONTRACT_CUSTOM_REPORTER
00459 #  define XCONTRACT_CUSTOM_REPORTER                                         XCONTRACT_NS_QUAL(xContract_violationReport)
00460 # endif /* !XCONTRACT_CUSTOM_REPORTER */
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 /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00469 
00470 
00471 /* Unexpected condition */
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 /* ? XCONTRACT_ENFORCING_UNEXPECTED_CONDITION */
00482 # define XCONTRACT_ENFORCE_UNEXPECTED_CONDITION(msg)                ((void)0)
00483 #endif /* XCONTRACT_ENFORCING_UNEXPECTED_CONDITION */
00484 
00485 
00486 /* Precondition (logic) */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_LEVEL */
00492 #  define XCONTRACT_ENFORCE_PRECONDITION_LOGIC(expr, msg, level)    ((void)0)
00493 # endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_LEVEL */
00494 #endif /* 0 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 */
00499 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_0(expr, msg)          ((void)0)
00500 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 */
00505 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_1(expr, msg)          ((void)0)
00506 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 */
00511 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_2(expr, msg)          ((void)0)
00512 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 */
00517 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_3(expr, msg)          ((void)0)
00518 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 */
00523 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_4(expr, msg)          ((void)0)
00524 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 */
00525 
00526 
00527 /* Precondition (parameters) */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 */
00532 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_0(expr, msg)     ((void)0)
00533 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 */
00538 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_1(expr, msg)     ((void)0)
00539 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 */
00544 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_2(expr, msg)     ((void)0)
00545 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 */
00550 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_3(expr, msg)     ((void)0)
00551 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 */
00556 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_4(expr, msg)     ((void)0)
00557 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 */
00558 
00559 
00560 /* Postcondition (return value) */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 */
00565 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_0(expr, msg)         ((void)0)
00566 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 */
00571 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_1(expr, msg)         ((void)0)
00572 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 */
00577 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_2(expr, msg)         ((void)0)
00578 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 */
00583 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_3(expr, msg)         ((void)0)
00584 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 */
00589 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_4(expr, msg)         ((void)0)
00590 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 */
00591 
00592 
00593 /* Postcondition (logic) */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 */
00598 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_0(expr, msg)         ((void)0)
00599 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 */
00604 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_1(expr, msg)         ((void)0)
00605 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 */
00610 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_2(expr, msg)         ((void)0)
00611 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 */
00616 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_3(expr, msg)         ((void)0)
00617 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 */
00622 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_4(expr, msg)         ((void)0)
00623 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 */
00624 
00625 
00626 /* Postcondition (parameters) */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0 */
00631 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_0(expr, msg)    ((void)0)
00632 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1 */
00637 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_1(expr, msg)    ((void)0)
00638 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2 */
00643 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_2(expr, msg)    ((void)0)
00644 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3 */
00649 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_3(expr, msg)    ((void)0)
00650 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4 */
00655 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_4(expr, msg)    ((void)0)
00656 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4 */
00657 
00658 
00659 /* Invariant (class) */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_0 */
00664 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_0(expr, msg)             ((void)0)
00665 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_0 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_1 */
00670 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_1(expr, msg)             ((void)0)
00671 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_1 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_2 */
00676 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_2(expr, msg)             ((void)0)
00677 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_2 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_3 */
00682 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_3(expr, msg)             ((void)0)
00683 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_3 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_4 */
00688 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_4(expr, msg)             ((void)0)
00689 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_4 */
00690 
00691 
00692 /* Invariant (global) */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 */
00697 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_0(expr, msg)            ((void)0)
00698 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 */
00703 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_1(expr, msg)            ((void)0)
00704 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 */
00709 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_2(expr, msg)            ((void)0)
00710 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 */
00715 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_3(expr, msg)            ((void)0)
00716 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 */
00721 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_4(expr, msg)            ((void)0)
00722 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 */
00723 
00724 
00725 /* Static data */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_0 */
00730 # define XCONTRACT_ENFORCE_STATIC_DATA_0(expr, msg)                 ((void)0)
00731 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_0 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_1 */
00736 # define XCONTRACT_ENFORCE_STATIC_DATA_1(expr, msg)                 ((void)0)
00737 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_1 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_2 */
00742 # define XCONTRACT_ENFORCE_STATIC_DATA_2(expr, msg)                 ((void)0)
00743 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_2 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_3 */
00748 # define XCONTRACT_ENFORCE_STATIC_DATA_3(expr, msg)                 ((void)0)
00749 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_3 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_4 */
00754 # define XCONTRACT_ENFORCE_STATIC_DATA_4(expr, msg)                 ((void)0)
00755 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_4 */
00756 
00757 
00758 /* Intermediate assumption */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_0 */
00763 # define XCONTRACT_ENFORCE_ASSUMPTION_0(expr, msg)                  ((void)0)
00764 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_0 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_1 */
00769 # define XCONTRACT_ENFORCE_ASSUMPTION_1(expr, msg)                  ((void)0)
00770 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_1 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_2 */
00775 # define XCONTRACT_ENFORCE_ASSUMPTION_2(expr, msg)                  ((void)0)
00776 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_2 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_3 */
00781 # define XCONTRACT_ENFORCE_ASSUMPTION_3(expr, msg)                  ((void)0)
00782 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_3 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_4 */
00787 # define XCONTRACT_ENFORCE_ASSUMPTION_4(expr, msg)                  ((void)0)
00788 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_4 */
00789 
00790 /* /////////////////////////////////////////////////////////////////////////
00791  * Application-defined functions
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  * API functions
00815  */
00816 
00817 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00818 XCONTRACT_CALL(int) xContract_doWhileCondition(char const* );
00819 #endif /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
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  * Namespace
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 } /* namespace xcontract */
00919 #endif /* !_XCONTRACT_NO_NAMESPACE */
00920 
00921 /* ////////////////////////////////////////////////////////////////////// */
00922 
00923 #endif /* !XCONTRACT_INCL_XCONTRACT_H_XCONTRACT */
00924 
00925 /* ////////////////////////////////////////////////////////////////////// */

b64 Library documentation © Synesis Software Pty Ltd, 2004-2007