src/core/assert.h
author Tom Henderson <tomh@tomh.org>
Thu, 10 Jan 2008 07:31:40 -0800
changeset 2217 0b4567d545de
parent 1248 2d698655b11e
child 2834 1aab57845b07
permissions -rw-r--r--
Doxygen organization
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     1
/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     2
/*
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     3
 * Copyright (c) 2006 INRIA
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     4
 * All rights reserved.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     5
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     6
 * This program is free software; you can redistribute it and/or modify
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     7
 * it under the terms of the GNU General Public License version 2 as
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     8
 * published by the Free Software Foundation;
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
     9
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    10
 * This program is distributed in the hope that it will be useful,
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    13
 * GNU General Public License for more details.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    14
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    16
 * along with this program; if not, write to the Free Software
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    17
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    18
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    19
 * Author: Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    20
 */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    21
#ifndef ASSERT_H
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    22
#define ASSERT_H
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    23
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    24
#ifdef NS3_ASSERT_ENABLE
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
#include <iostream>
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
1018
99476ef5580a Bug #7: Better breakpoints.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1003
diff changeset
    28
#include "breakpoint.h"
99476ef5580a Bug #7: Better breakpoints.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1003
diff changeset
    29
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
/**
2217
0b4567d545de Doxygen organization
Tom Henderson <tomh@tomh.org>
parents: 1248
diff changeset
    31
 * \ingroup core
1248
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    32
 * \defgroup assert Assert
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    33
 * \brief assert functions and macros
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    34
 *
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    35
 * The assert macros are used to verify
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    36
 * at runtime that a certain condition is true. If it is
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    37
 * not true, the program halts. These checks are built
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    38
 * into the program only in debugging builds. They are
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    39
 * removed in optimized builds.
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    40
 */
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    41
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    42
/**
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
 * \ingroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
 * \param condition condition to verifiy.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    46
 * At runtime, in debugging builds, if this condition is not
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
 * true, the program prints the source file, line number and 
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
 * unverified condition and halts in the ns3::AssertBreakpoint 
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
 * function.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
 */
324
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    51
#define NS_ASSERT(condition)                                    \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    52
  do                                                            \
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
    {                                                           \
324
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    54
      if (!(condition))                                         \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    55
        {                                                       \
1003
c9683107993d fix bug 59: debug output now goes to stderr.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 416
diff changeset
    56
          std::cerr << "assert failed. file=" << __FILE__ <<    \
324
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    57
            ", line=" << __LINE__ << ", cond=\""#condition <<   \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    58
            "\"" << std::endl;                                  \
1018
99476ef5580a Bug #7: Better breakpoints.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1003
diff changeset
    59
          NS_BREAKPOINT ();                                     \
324
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    60
        }                                                       \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    61
    }                                                           \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    62
  while (false)
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    63
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    65
/**
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
 * \ingroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
 * \param condition condition to verifiy.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
 * \param message message to output
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
 * At runtime, in debugging builds, if this condition is not
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
 * true, the program prints the message to output and
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
 * halts in the ns3::AssertBreakpoint function.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
 */
324
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    74
#define NS_ASSERT_MSG(condition, message)       \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    75
  do                                            \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    76
    {                                           \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    77
      if (!(condition))                         \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    78
        {                                       \
1003
c9683107993d fix bug 59: debug output now goes to stderr.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 416
diff changeset
    79
          std::cerr << message << std::endl;    \
1018
99476ef5580a Bug #7: Better breakpoints.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1003
diff changeset
    80
          NS_BREAKPOINT ();                     \
324
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    81
        }                                       \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    82
    }                                           \
7571b28edc22 make trailing ';' mandatory for NS_ASSERT* and NS_FATAL_ERROR macros. fix uses.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 276
diff changeset
    83
  while (false)
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
#else /* NS3_ASSERT_ENABLE */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
#define NS_ASSERT(cond)
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
#define NS_ASSERT_MSG(cond,msg)
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
#endif /* NS3_ASSERT_ENABLE */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
#endif /* ASSERT_H */