src/core/model/assert.h
changeset 6821 203367ae7433
parent 6370 0a0b6bf5fdfd
child 7169 358f71a624d8
equal deleted inserted replaced
6820:a09e1a107172 6821:203367ae7433
       
     1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
       
     2 /*
       
     3  * Copyright (c) 2006 INRIA, 2010 NICTA
       
     4  *
       
     5  * This program is free software; you can redistribute it and/or modify
       
     6  * it under the terms of the GNU General Public License version 2 as
       
     7  * published by the Free Software Foundation;
       
     8  *
       
     9  * This program is distributed in the hope that it will be useful,
       
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
       
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       
    12  * GNU General Public License for more details.
       
    13  *
       
    14  * You should have received a copy of the GNU General Public License
       
    15  * along with this program; if not, write to the Free Software
       
    16  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
       
    17  *
       
    18  * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
       
    19  *         Quincy Tse <quincy.tse@nicta.com.au>
       
    20  */
       
    21 #ifndef NS_ASSERT_H
       
    22 #define NS_ASSERT_H
       
    23 
       
    24 #ifdef NS3_ASSERT_ENABLE
       
    25 
       
    26 #include <iostream>
       
    27 
       
    28 #include "fatal-error.h"
       
    29 
       
    30 /**
       
    31  * \ingroup core
       
    32  * \defgroup debugging Debugging
       
    33  */
       
    34 /**
       
    35  * \ingroup debugging
       
    36  * \defgroup assert Assert
       
    37  *
       
    38  * \brief assert functions and macros
       
    39  *
       
    40  * The assert macros are used to verify
       
    41  * at runtime that a certain condition is true. If it is
       
    42  * not true, the program halts. These checks are built
       
    43  * into the program only in debugging builds. They are
       
    44  * removed in optimized builds.
       
    45  *
       
    46  * These macro are intended to check certain conditions
       
    47  * to be true. Do not put code that also have side effects
       
    48  * that your program relies on (eg. code that advances
       
    49  * an iterator and return false at end of file) because
       
    50  * the code will not be executed on release builds!!
       
    51  *
       
    52  * If assertion-style checks are required for release
       
    53  * builds, use NS_ABORT_UNLESS and NS_ABORT_MSG_UNLESS.
       
    54  */
       
    55 
       
    56 /**
       
    57  * \ingroup assert
       
    58  * \param condition condition to verify.
       
    59  *
       
    60  * At runtime, in debugging builds, if this condition is not
       
    61  * true, the program prints the source file, line number and 
       
    62  * unverified condition and halts by calling std::terminate
       
    63  */
       
    64 #define NS_ASSERT(condition)                                    \
       
    65   do                                                            \
       
    66     {                                                           \
       
    67       if (!(condition))                                         \
       
    68         {                                                       \
       
    69           std::cerr << "assert failed. cond=\"" <<              \
       
    70             #condition << "\", ";                               \
       
    71           NS_FATAL_ERROR_NO_MSG();                              \
       
    72         }                                                       \
       
    73     }                                                           \
       
    74   while (false)
       
    75 
       
    76 
       
    77 /**
       
    78  * \ingroup assert
       
    79  * \param condition condition to verify.
       
    80  * \param message message to output
       
    81  *
       
    82  * At runtime, in debugging builds, if this condition is not
       
    83  * true, the program prints the message to output and
       
    84  * halts by calling std::terminate.
       
    85  */
       
    86 #define NS_ASSERT_MSG(condition, message)             \
       
    87   do                                                  \
       
    88     {                                                 \
       
    89       if (!(condition))                               \
       
    90         {                                             \
       
    91           std::cerr << "assert failed. cond=\"" <<    \
       
    92             #condition << "\", ";                     \
       
    93           NS_FATAL_ERROR (message);                   \
       
    94         }                                             \
       
    95     }                                                 \
       
    96   while (false)
       
    97 
       
    98 #else /* NS3_ASSERT_ENABLE */
       
    99 
       
   100 #define NS_ASSERT(cond)
       
   101 #define NS_ASSERT_MSG(cond,msg)
       
   102 
       
   103 #endif /* NS3_ASSERT_ENABLE */
       
   104 
       
   105 #endif /* ASSERT_H */