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