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:     4th July 2010
00008  *
00009  * Home:        http://xcontract.org/
00010  *
00011  * Copyright (c) 2001-2010, 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       5
00053 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_REVISION    4
00054 # define XCONTRACT_VER_XCONTRACT_H_XCONTRACT_EDIT        181
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      7
00078 
00079 #define XCONTRACT_VER               0x000307ff
00080 
00081 /* /////////////////////////////////////////////////////////////////////////
00082  * Includes
00083  */
00084 
00085 #ifdef __cplusplus
00086 # if defined(UNIX) || \
00087      defined(unix) || \
00088      defined(unix__) || \
00089      defined(__unix) || \
00090      defined(__unix__)
00091  /* We include threading.h to prevent the definition of _REENTRANT standard
00092   * headers on some UNIX operating systems from confusing the feature
00093   * discrimination in UNIXSTL and having it think that we're multithreading
00094   * when we're not.
00095   */
00096 #  include <unixstl/synch/util/features.h>
00097 # endif /* UNIX */
00098 #endif /* __cplusplus */
00099 
00100 #include <stddef.h>
00101 
00102 /* /////////////////////////////////////////////////////////////////////////
00103  * Namespace
00104  */
00105 
00106 #if defined(_STLSOFT_NO_NAMESPACE) || \
00107     !defined(__cplusplus)
00108 # define _XCONTRACT_NO_NAMESPACE
00109 #endif /* _STLSOFT_NO_NAMESPACE */
00110 
00111 #ifndef _XCONTRACT_NO_NAMESPACE
00112 
00116 namespace xcontract
00117 {
00118 #endif /* !_XCONTRACT_NO_NAMESPACE */
00119 
00120 /* /////////////////////////////////////////////////////////////////////////
00121  * Documentation
00122  */
00123 
00143 /* /////////////////////////////////////////////////////////////////////////
00144  * Compatibility
00145  */
00146 
00147 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00148 
00149  /* static cast */
00150 # ifdef __cplusplus
00151 #  define XCONTRACT_STATIC_CAST_(t, v)          static_cast< t>(v)
00152 # else /* ? __cplusplus */
00153 #  define XCONTRACT_STATIC_CAST_(t, v)          (t)(v)
00154 # endif /* __cplusplus */
00155 
00156  /* __FUNCTION__ support */
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 /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00194 
00195 /* /////////////////////////////////////////////////////////////////////////
00196  * Features
00197  */
00198 
00199 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
00200 
00201 # if !defined(XCONTRACT_DECLSPEC)
00202 #  define XCONTRACT_DECLSPEC
00203 # endif /* !XCONTRACT_DECLSPEC */
00204 
00205 # if defined(__cplusplus) || \
00206      defined(XCONTRACT_DOCUMENTATION_SKIP_SECTION)
00207 #  define XCONTRACT_EXTERN_C                    extern "C"
00208 # else /* ? __cplusplus */
00209 #  define XCONTRACT_EXTERN_C                    extern
00210 # endif /* !__cplusplus */
00211 
00212 # if !defined(XCONTRACT_CALLCONV)
00213 #  define XCONTRACT_CALLCONV
00214 # endif /* !XCONTRACT_CALLCONV */
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 /* ? XCONTRACT_PPF_FUNC(TION)_SYMBOL_SUPPORT */
00223 #  define XCONTRACT_GET_FUNCTION_()             XCONTRACT_STATIC_CAST_(char const*, 0)
00224 # endif /* XCONTRACT_PPF_FUNC(TION)_SYMBOL_SUPPORT */
00225 
00226 # ifndef _XCONTRACT_NO_NAMESPACE
00227 #  define XCONTRACT_NS_QUAL(sym)                xcontract::sym
00228 # else /* ? _XCONTRACT_NO_NAMESPACE */
00229 #  define XCONTRACT_NS_QUAL(sym)                sym
00230 # endif /* _XCONTRACT_NO_NAMESPACE */
00231 
00232 # ifdef XCONTRACT_PPF_DECLSPEC_NORETURN_SYMBOL_SUPPORT
00233 #  define XCONTRACT_NORETURN                    __declspec(noreturn)
00234 # else /* ? compiler */
00235 #  define XCONTRACT_NORETURN
00236 # endif /* compiler */
00237 
00238 #endif /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00239 
00240 /* /////////////////////////////////////////////////////////////////////////
00241  * Modes:
00242  *
00243  *  - Debug:
00244  *      - pre-condition
00245  *          - logic             - on
00246  *          - parameters        - on
00247  *      - post-condition
00248  *          - logic             - on
00249  *          - ret val           - on
00250  *          - out parameters    - on
00251  *      - invariant
00252  *          - class             - on
00253  *          - global            - on
00254  *      - unexpected condition  - on
00255  *
00256  *  - Test:
00257  *      - pre-condition
00258  *          - logic             - on
00259  *          - parameters        - on
00260  *      - post-condition
00261  *          - logic             - on
00262  *          - ret val           - on
00263  *          - out parameters    - off
00264  *      - invariant
00265  *          - class             - on
00266  *          - global            - on
00267  *      - unexpected condition  - on
00268  *
00269  *  - Release:
00270  *      - pre-condition
00271  *          - logic             - on
00272  *          - parameters        - on
00273  *      - post-condition
00274  *          - logic             - off
00275  *          - ret val           - off
00276  *          - out parameters    - off
00277  *      - invariant
00278  *          - class             - on
00279  *          - global            - on
00280  *      - unexpected condition  - on
00281  *
00282  *  - Off:
00283  *      - pre-condition
00284  *          - logic             - off
00285  *          - parameters        - off
00286  *      - post-condition
00287  *          - logic             - off
00288  *          - ret val           - off
00289  *          - out parameters    - off
00290  *      - invariant
00291  *          - class             - off
00292  *          - global            - off
00293  *      - unexpected condition  - off
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   /* No mode specified, so we deduce from presence/absence of debug
00305    * symbols
00306    */
00307 #  if !defined(NDEBUG)
00308 #   define XCONTRACT_MODE_DEBUG
00309 #  else /* ? NDEBUG */
00310 #   define XCONTRACT_MODE_RELEASE
00311 #  endif /* NDEBUG */
00312 # endif /* XCONTRACT_MODE_???? */
00313 
00314 # if defined(XCONTRACT_MODE_DEBUG)
00315    /* Everything is on in Debug */
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 /* XCONTRACT_MODE_DEBUG */
00363 
00364 # if defined(XCONTRACT_MODE_TEST)
00365    /* Everything except postcondition out-parameters is on in Test */
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 /* XCONTRACT_MODE_TEST */
00408 
00409 # if defined(XCONTRACT_MODE_RELEASE)
00410    /* Everything except postconditions and intermediate assumptions are on in Release */
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 /* XCONTRACT_MODE_RELEASE */
00438 
00439 # if defined(XCONTRACT_MODE_OFF)
00440    /* Nothing is on in Off */
00441 # endif /* XCONTRACT_MODE_OFF */
00442 
00443 
00444 #endif /* !XCONTRACT_NO_STOCK_MODES */
00445 
00446 /* /////////////////////////////////////////////////////////////////////////
00447  * Types
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 /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00470 };
00471 #ifndef __cplusplus
00472 typedef enum xContract_violation_type_t         xContract_violation_type_t;
00473 #endif /* !__cplusplus */
00474 #ifndef _XCONTRACT_NO_NAMESPACE
00475 
00477 typedef xContract_violation_type_t              violation_type_t;
00478 #endif /* !_XCONTRACT_NO_NAMESPACE */
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 /* !_XCONTRACT_NO_NAMESPACE */
00498 
00499 /* /////////////////////////////////////////////////////////////////////////
00500  * Macros
00501  *
00502  * NOTE: These macro names are deliberately unappealingly large, so that
00503  * you'll be motivated to define your own, company/project-specific macros,
00504  * that do exactly what you want, rather than the very general facilities
00505  * provided here.
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 /* ? XCONTRACT_VERIFY_CONDITION_AT_RUNTIME */
00515 #  define XCONTRACT_ENFORCE_CONDITION_VERIFIER_(type, level, expr, msg)     (1)
00516 # endif /* XCONTRACT_VERIFY_CONDITION_AT_RUNTIME */
00517 
00518 # ifndef XCONTRACT_CUSTOM_REPORTER
00519 #  define XCONTRACT_CUSTOM_REPORTER                                         XCONTRACT_NS_QUAL(xContract_violationReport)
00520 # endif /* !XCONTRACT_CUSTOM_REPORTER */
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 /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
00529 
00530 
00531 /* Unexpected condition */
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 /* ? XCONTRACT_ENFORCING_UNEXPECTED_CONDITION */
00544 # define XCONTRACT_ENFORCE_UNEXPECTED_CONDITION(msg)                ((void)0)
00545 #endif /* XCONTRACT_ENFORCING_UNEXPECTED_CONDITION */
00546 
00547 
00548 /* Precondition (logic) */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_LEVEL */
00554 #  define XCONTRACT_ENFORCE_PRECONDITION_LOGIC(expr, msg, level)    ((void)0)
00555 # endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_LEVEL */
00556 #endif /* 0 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 */
00570 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_0(expr, msg)          ((void)0)
00571 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_0 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 */
00585 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_1(expr, msg)          ((void)0)
00586 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_1 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 */
00600 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_2(expr, msg)          ((void)0)
00601 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_2 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 */
00615 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_3(expr, msg)          ((void)0)
00616 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_3 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 */
00630 # define XCONTRACT_ENFORCE_PRECONDITION_LOGIC_4(expr, msg)          ((void)0)
00631 #endif /* XCONTRACT_ENFORCING_PRECONDITION_LOGIC_4 */
00632 
00633 
00634 /* Precondition (parameters) */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 */
00648 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_0(expr, msg)     ((void)0)
00649 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_0 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 */
00663 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_1(expr, msg)     ((void)0)
00664 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_1 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 */
00678 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_2(expr, msg)     ((void)0)
00679 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_2 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 */
00693 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_3(expr, msg)     ((void)0)
00694 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_3 */
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 /* ? XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 */
00708 # define XCONTRACT_ENFORCE_PRECONDITION_PARAMETERS_4(expr, msg)     ((void)0)
00709 #endif /* XCONTRACT_ENFORCING_PRECONDITION_PARAMETERS_4 */
00710 
00711 
00712 /* Postcondition (return value) */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 */
00726 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_0(expr, msg)         ((void)0)
00727 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_0 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 */
00741 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_1(expr, msg)         ((void)0)
00742 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_1 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 */
00756 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_2(expr, msg)         ((void)0)
00757 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_2 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 */
00771 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_3(expr, msg)         ((void)0)
00772 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_3 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 */
00786 # define XCONTRACT_ENFORCE_POSTCONDITION_RETURN_4(expr, msg)         ((void)0)
00787 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_RETURN_4 */
00788 
00789 
00790 /* Postcondition (logic) */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 */
00804 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_0(expr, msg)         ((void)0)
00805 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_0 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 */
00819 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_1(expr, msg)         ((void)0)
00820 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_1 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 */
00834 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_2(expr, msg)         ((void)0)
00835 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_2 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 */
00849 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_3(expr, msg)         ((void)0)
00850 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_3 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 */
00864 # define XCONTRACT_ENFORCE_POSTCONDITION_LOGIC_4(expr, msg)         ((void)0)
00865 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_LOGIC_4 */
00866 
00867 
00868 /* Postcondition (parameters) */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0 */
00882 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_0(expr, msg)    ((void)0)
00883 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_0 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1 */
00897 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_1(expr, msg)    ((void)0)
00898 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_1 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2 */
00912 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_2(expr, msg)    ((void)0)
00913 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_2 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3 */
00927 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_3(expr, msg)    ((void)0)
00928 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_3 */
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 /* ? XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4 */
00942 # define XCONTRACT_ENFORCE_POSTCONDITION_PARAMETERS_4(expr, msg)    ((void)0)
00943 #endif /* XCONTRACT_ENFORCING_POSTCONDITION_PARAMETERS_4 */
00944 
00945 
00946 /* Invariant (class) */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_0 */
00960 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_0(expr, msg)             ((void)0)
00961 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_0 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_1 */
00975 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_1(expr, msg)             ((void)0)
00976 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_1 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_2 */
00990 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_2(expr, msg)             ((void)0)
00991 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_2 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_3 */
01005 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_3(expr, msg)             ((void)0)
01006 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_3 */
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 /* ? XCONTRACT_ENFORCING_CLASS_INVARIANT_4 */
01020 # define XCONTRACT_ENFORCE_CLASS_INVARIANT_4(expr, msg)             ((void)0)
01021 #endif /* XCONTRACT_ENFORCING_CLASS_INVARIANT_4 */
01022 
01023 
01024 /* Invariant (global) */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 */
01038 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_0(expr, msg)            ((void)0)
01039 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_0 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 */
01053 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_1(expr, msg)            ((void)0)
01054 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_1 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 */
01068 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_2(expr, msg)            ((void)0)
01069 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_2 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 */
01083 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_3(expr, msg)            ((void)0)
01084 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_3 */
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 /* ? XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 */
01098 # define XCONTRACT_ENFORCE_GLOBAL_INVARIANT_4(expr, msg)            ((void)0)
01099 #endif /* XCONTRACT_ENFORCING_GLOBAL_INVARIANT_4 */
01100 
01101 
01102 /* Static data */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_0 */
01116 # define XCONTRACT_ENFORCE_STATIC_DATA_0(expr, msg)                 ((void)0)
01117 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_0 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_1 */
01131 # define XCONTRACT_ENFORCE_STATIC_DATA_1(expr, msg)                 ((void)0)
01132 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_1 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_2 */
01146 # define XCONTRACT_ENFORCE_STATIC_DATA_2(expr, msg)                 ((void)0)
01147 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_2 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_3 */
01161 # define XCONTRACT_ENFORCE_STATIC_DATA_3(expr, msg)                 ((void)0)
01162 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_3 */
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 /* ? XCONTRACT_ENFORCING_STATIC_DATA_4 */
01176 # define XCONTRACT_ENFORCE_STATIC_DATA_4(expr, msg)                 ((void)0)
01177 #endif /* XCONTRACT_ENFORCING_STATIC_DATA_4 */
01178 
01179 
01180 /* Intermediate assumption */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_0 */
01194 # define XCONTRACT_ENFORCE_ASSUMPTION_0(expr, msg)                  ((void)0)
01195 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_0 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_1 */
01209 # define XCONTRACT_ENFORCE_ASSUMPTION_1(expr, msg)                  ((void)0)
01210 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_1 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_2 */
01224 # define XCONTRACT_ENFORCE_ASSUMPTION_2(expr, msg)                  ((void)0)
01225 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_2 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_3 */
01239 # define XCONTRACT_ENFORCE_ASSUMPTION_3(expr, msg)                  ((void)0)
01240 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_3 */
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 /* ? XCONTRACT_ENFORCING_ASSUMPTION_4 */
01254 # define XCONTRACT_ENFORCE_ASSUMPTION_4(expr, msg)                  ((void)0)
01255 #endif /* XCONTRACT_ENFORCING_ASSUMPTION_4 */
01256 
01257 /* /////////////////////////////////////////////////////////////////////////
01258  * Application-defined functions
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  * API functions
01289  */
01290 
01291 #ifndef XCONTRACT_DOCUMENTATION_SKIP_SECTION
01292 XCONTRACT_CALL(int) xContract_doWhileCondition(char const* );
01293 #endif /* !XCONTRACT_DOCUMENTATION_SKIP_SECTION */
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  * String access shims
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 /* __cplusplus */
01413 
01414 /* /////////////////////////////////////////////////////////////////////////
01415  * Namespace
01416  */
01417 
01418 #ifndef _XCONTRACT_NO_NAMESPACE
01419 } /* namespace xcontract */
01420 #endif /* !_XCONTRACT_NO_NAMESPACE */
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 /* ? !_XCONTRACT_NO_NAMESPACE */
01432     using ::c_str_data_a;
01433     using ::c_str_len_a;
01434     using ::c_str_ptr_a;
01435 #  endif /* !_XCONTRACT_NO_NAMESPACE */
01436 
01437 } /* namespace stlsoft */
01438 #endif /* _STLSOFT_NO_NAMESPACE */
01439 
01440 /* ////////////////////////////////////////////////////////////////////// */
01441 
01442 #endif /* !XCONTRACT_INCL_XCONTRACT_H_XCONTRACT */
01443 
01444 /* ///////////////////////////// end of file //////////////////////////// */

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