src/core/assert.h
author Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
Fri, 16 Feb 2007 09:00:22 +0100
changeset 276 58651aff818b
child 324 7571b28edc22
permissions -rw-r--r--
split out assert from debug.h
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
/**
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    25
 * \defgroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    26
 * \brief assert functions and macros
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    27
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    28
 * The assert macros are used to verify
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    29
 * at runtime that a certain condition is true. If it is
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    30
 * not true, the program halts. These checks are built
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    31
 * into the program only in debugging builds. They are
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    32
 * removed in optimized builds.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    33
 */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    34
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    35
namespace ns3 {
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    36
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    37
/**
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    38
 * \ingroup debugging
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    39
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    40
 * When an NS_ASSERT cannot verify its condition, 
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    41
 * this function is called. This is where you should
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    42
 * be able to put a breakpoint with a debugger if
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    43
 * you want to catch assertions before the program 
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    44
 * halts.
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
void AssertBreakpoint (void);
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    47
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    48
}//namespace ns3
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    49
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    50
#ifdef NS3_ASSERT_ENABLE
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    51
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    52
#include <iostream>
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    53
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    54
/**
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    55
 * \ingroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    56
 * \param condition condition to verifiy.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    57
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    58
 * 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
    59
 * 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
    60
 * 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
    61
 * function.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    62
 */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    63
#define NS_ASSERT(condition)                                   \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    64
  if (!(condition))                                             \
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
      std::cout << "assert failed. file=" << __FILE__ <<        \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    67
        ", line=" << __LINE__ << ", cond=\""#condition <<       \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    68
        "\"" << std::endl;                                      \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    69
      ns3::AssertBreakpoint ();                                 \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    70
    }
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    71
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    72
/**
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    73
 * \ingroup assert
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    74
 * \param condition condition to verifiy.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    75
 * \param message message to output
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    76
 *
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    77
 * 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
    78
 * 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
    79
 * halts in the ns3::AssertBreakpoint function.
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    80
 */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    81
#define NS_ASSERT_MSG(condition, message) \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    82
  if (!(condition))                        \
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
      std::cout << message << std::endl;   \
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    85
      ns3::AssertBreakpoint ();            \
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
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    88
#else /* NS3_ASSERT_ENABLE */
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
#define NS_ASSERT(cond)
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    91
#define NS_ASSERT_MSG(cond,msg)
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    92
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    93
#endif /* NS3_ASSERT_ENABLE */
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    94
58651aff818b split out assert from debug.h
Mathieu Lacage <mathieu.lacage@sophia.inria.fr>
parents:
diff changeset
    95
#endif /* ASSERT_H */