13123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// Debugging support implementation -*- C++ -*-
23123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
33123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
43123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// Free Software Foundation, Inc.
53123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh//
63123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// This file is part of the GNU ISO C++ Library.  This library is free
73123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// software; you can redistribute it and/or modify it under the
83123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// terms of the GNU General Public License as published by the
93123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// Free Software Foundation; either version 3, or (at your option)
103123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// any later version.
113123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
123123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// This library is distributed in the hope that it will be useful,
133123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// but WITHOUT ANY WARRANTY; without even the implied warranty of
143123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
153123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// GNU General Public License for more details.
163123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
173123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// Under Section 7 of GPL version 3, you are granted additional
183123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// permissions described in the GCC Runtime Library Exception, version
193123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// 3.1, as published by the Free Software Foundation.
203123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
213123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// You should have received a copy of the GNU General Public License and
223123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// a copy of the GCC Runtime Library Exception along with this program;
233123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
243123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// <http://www.gnu.org/licenses/>.
253123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
263123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh/** @file debug/debug.h
273123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  This file is a GNU debug extension to the Standard C++ Library.
283123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh */
293123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
303123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#ifndef _GLIBCXX_DEBUG_MACRO_SWITCH_H
313123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#define _GLIBCXX_DEBUG_MACRO_SWITCH_H 1
323123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
333123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh/** Macros and namespaces used by the implementation outside of debug
343123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  wrappers to verify certain properties. The __glibcxx_requires_xxx
353123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  macros are merely wrappers around the __glibcxx_check_xxx wrappers
363123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  when we are compiling with debug mode, but disappear when we are
373123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  in release mode so that there is no checking performed in, e.g.,
383123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  the standard library algorithms.
393123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh*/
403123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
413123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh// Debug mode namespaces.
423123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
433123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh/**
443123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh * @namespace std::__debug
453123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh * @brief GNU debug code, replaces standard behavior with debug behavior.
463123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh */
473123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsiehnamespace std
483123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh{
493123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh  namespace __debug { }
503123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh}
513123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
523123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh/** @namespace __gnu_debug
533123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh *  @brief GNU debug classes for public use.
543123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh*/
553123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsiehnamespace __gnu_debug
563123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh{
573123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh  using namespace std::__debug;
583123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh}
593123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
603123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#ifndef _GLIBCXX_DEBUG
613123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
623123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define _GLIBCXX_DEBUG_ASSERT(_Condition)
633123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define _GLIBCXX_DEBUG_PEDASSERT(_Condition)
643123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define _GLIBCXX_DEBUG_ONLY(_Statement) ;
653123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_cond(_Cond,_Msg)
663123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_valid_range(_First,_Last)
673123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_non_empty_range(_First,_Last)
683123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted(_First,_Last)
693123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred)
703123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2)
713123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred)
723123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_lower(_First,_Last,_Value)
733123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_upper(_First,_Last,_Value)
743123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred)
753123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred)
763123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_heap(_First,_Last)
773123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_heap_pred(_First,_Last,_Pred)
783123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_nonempty()
793123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_string(_String)
803123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_string_len(_String,_Len)
813123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_subscript(_N)
823123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
833123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#else
843123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
853123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# include <debug/macros.h>
863123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
873123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#define _GLIBCXX_DEBUG_ASSERT(_Condition) __glibcxx_assert(_Condition)
883123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
893123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#ifdef _GLIBCXX_DEBUG_PEDANTIC
903123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define _GLIBCXX_DEBUG_PEDASSERT(_Condition) _GLIBCXX_DEBUG_ASSERT(_Condition)
913123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#else
923123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define _GLIBCXX_DEBUG_PEDASSERT(_Condition)
933123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#endif
943123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
953123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define _GLIBCXX_DEBUG_ONLY(_Statement) _Statement
963123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
973123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_cond(_Cond,_Msg) _GLIBCXX_DEBUG_VERIFY(_Cond,_Msg)
983123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_valid_range(_First,_Last) \
993123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_valid_range(_First,_Last)
1003123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_non_empty_range(_First,_Last) \
1013123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_non_empty_range(_First,_Last)
1023123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted(_First,_Last) \
1033123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_sorted(_First,_Last)
1043123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted_pred(_First,_Last,_Pred) \
1053123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_sorted_pred(_First,_Last,_Pred)
1063123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted_set(_First1,_Last1,_First2) \
1073123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_sorted_set(_First1,_Last1,_First2)
1083123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_sorted_set_pred(_First1,_Last1,_First2,_Pred) \
1093123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_sorted_set_pred(_First1,_Last1,_First2,_Pred)
1103123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_lower(_First,_Last,_Value)	\
1113123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_partitioned_lower(_First,_Last,_Value)
1123123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_upper(_First,_Last,_Value)	\
1133123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_partitioned_upper(_First,_Last,_Value)
1143123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_lower_pred(_First,_Last,_Value,_Pred) \
1153123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_partitioned_lower_pred(_First,_Last,_Value,_Pred)
1163123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_partitioned_upper_pred(_First,_Last,_Value,_Pred) \
1173123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_partitioned_upper_pred(_First,_Last,_Value,_Pred)
1183123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_heap(_First,_Last) \
1193123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_heap(_First,_Last)
1203123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_heap_pred(_First,_Last,_Pred) \
1213123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_heap_pred(_First,_Last,_Pred)
1223123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_nonempty() __glibcxx_check_nonempty()
1233123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_string(_String) __glibcxx_check_string(_String)
1243123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_string_len(_String,_Len)	\
1253123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh     __glibcxx_check_string_len(_String,_Len)
1263123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# define __glibcxx_requires_subscript(_N) __glibcxx_check_subscript(_N)
1273123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
1283123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh# include <debug/functions.h>
1293123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
1303123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#endif
1313123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh
1323123853ede6209e485fb7110bdcd38aea0f33d23Andrew Hsieh#endif // _GLIBCXX_DEBUG_MACRO_SWITCH_H
133