src/core/assert.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Thu, 30 Aug 2007 13:58:15 +0200
changeset 1399 5945e92014e2
parent 1248 2d698655b11e
child 2217 0b4567d545de
permissions -rw-r--r--
move printing to client code
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
/**
1248
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    31
 * \defgroup assert Assert
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    32
 * \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
    33
 *
2d698655b11e revert part of gustavo's patch for 'better breakpoints'
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 1018
diff changeset
    34
 * 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
    35
 * 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
    36
 * 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
    37
 * 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
    38
 * 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
    39
 */
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
/**
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
 * \ingroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
 * \param condition condition to verifiy.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    45
 * 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
    46
 * 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
    47
 * 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
    48
 * function.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
 */
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
    50
#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
    51
  do                                                            \
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
    {                                                           \
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
    53
      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
    54
        {                                                       \
1003
c9683107993d fix bug 59: debug output now goes to stderr.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 416
diff changeset
    55
          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
    56
            ", 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
    57
            "\"" << std::endl;                                  \
1018
99476ef5580a Bug #7: Better breakpoints.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1003
diff changeset
    58
          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
    59
        }                                                       \
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
  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
    62
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
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
 * \ingroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    66
 * \param condition condition to verifiy.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
 * \param message message to output
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
 * 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
    70
 * 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
    71
 * halts in the ns3::AssertBreakpoint function.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
 */
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
    73
#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
    74
  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
    75
    {                                           \
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
      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
    77
        {                                       \
1003
c9683107993d fix bug 59: debug output now goes to stderr.
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents: 416
diff changeset
    78
          std::cerr << message << std::endl;    \
1018
99476ef5580a Bug #7: Better breakpoints.
Gustavo J. A. M. Carneiro <gjc@inescporto.pt>
parents: 1003
diff changeset
    79
          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
    80
        }                                       \
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
  while (false)
276
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    83
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    84
#else /* NS3_ASSERT_ENABLE */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    86
#define NS_ASSERT(cond)
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    87
#define NS_ASSERT_MSG(cond,msg)
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    89
#endif /* NS3_ASSERT_ENABLE */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    90
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
#endif /* ASSERT_H */