19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_DEBUG_H 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DEBUG_H 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 23e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if (defined (_STLP_DEBUG) || defined (_STLP_DEBUG_ALLOC)) && \ 24e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott !defined (_STLP_ASSERTIONS) 25e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ASSERTIONS 1 26e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 28e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_ASSERTIONS) 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_FILE__) 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_FILE__ __FILE__ 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockenum { 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //General errors 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlFormat_ERROR_RETURN, 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlFormat_ASSERTION_FAILURE, 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlFormat_VERBOSE_ASSERTION_FAILURE, 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_ARGUMENT, 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Container/Iterator related errors 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_CONTAINER, 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_EMPTY_CONTAINER, 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_ERASE_PAST_THE_END, 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_OUT_OF_BOUNDS, 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_NOT_OWNER, 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_SHOULD_NOT_OWNER, 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_ITERATOR, 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_LEFTHAND_ITERATOR, 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_RIGHTHAND_ITERATOR, 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DIFFERENT_OWNERS , 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_NOT_DEREFERENCEABLE , 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_RANGE , 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_NOT_IN_RANGE_1 , 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_NOT_IN_RANGE_2 , 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_ADVANCE , 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_SINGULAR_ITERATOR , 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Bad predicate for sorting 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_STRICT_WEAK_PREDICATE, 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_INVALID_EQUIVALENT_PREDICATE, 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // debug alloc messages 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DBA_DELETED_TWICE , 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DBA_NEVER_ALLOCATED , 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DBA_TYPE_MISMATCH , 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DBA_SIZE_MISMATCH , 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DBA_UNDERRUN , 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_DBA_OVERRUN , 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // auto_ptr messages 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_AUTO_PTR_NULL , 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Memory alignent message 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_WRONG_MEMORY_ALIGNMENT, 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _StlMsg_UNKNOWN 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* _StlMsg_MAX */ 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* have to hardcode that ;() */ 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _StlMsg_MAX 31 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 82e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass __owned_link; 83e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass __owned_list; 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 85e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if defined (_STLP_DEBUG_MODE_THROWS) 86e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_MESSAGE_NORETURN _STLP_FUNCTION_THROWS 87e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# else 88e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_MESSAGE_NORETURN 89e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Dummy> 92e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottclass __stl_debug_engine { 93e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottpublic: 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Basic routine to report any debug message 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Use _STLP_DEBUG_MESSAGE to override 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_MESSAGE_NORETURN _STLP_CALL _Message(const char * format_str, ...); 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Micsellanous function to report indexed error message 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _IndexedError(int __ind, const char* __f, int __l); 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Basic assertion report mechanism. 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Reports failed assertion via __stl_debug_message and calls _Terminate 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // if _STLP_DEBUG_TERMINATE is specified, calls __stl_debug_terminate instead 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Assert(const char* __expr, const char* __f, int __l); 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // The same, with additional diagnostics 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _VerboseAssert(const char* __expr, int __error_ind, const char* __f, int __l); 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // If exceptions are present, sends unique exception 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // If not, calls _STLP_ABORT() to terminate 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Use _STLP_DEBUG_TERMINATE to override 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Terminate(); 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_DEBUG) 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // owned_list/link delegate non-inline functions here 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL _Check_same_owner( const __owned_link& __i1, 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_link& __i2); 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL _Check_same_or_null_owner( const __owned_link& __i1, 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_link& __i2); 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL _Check_if_owner( const __owned_list*, const __owned_link&); 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _STLP_CALL _Check_if_not_owner( const __owned_list*, const __owned_link&); 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Verify(const __owned_list*); 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Swap_owners(__owned_list&, __owned_list&); 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Invalidate_all(__owned_list*); 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Set_owner(__owned_list& /*src*/, __owned_list& /*dst*/); 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _Stamp_all(__owned_list*, __owned_list*); 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _M_detach(__owned_list*, __owned_link*); 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void _STLP_CALL _M_attach(__owned_list*, __owned_link*); 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // accessor : check and get pointer to the container 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static void* _STLP_CALL _Get_container_ptr(const __owned_link*); 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // debug messages and formats 144e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott static const char* _Message_table[_StlMsg_MAX]; 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 147e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# undef _STLP_MESSAGE_NORETURN 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_USE_TEMPLATE_EXPORT) 150e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_STLP_EXPORT_TEMPLATE_CLASS __stl_debug_engine<bool>; 151e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef __stl_debug_engine<bool> __stl_debugger; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_ASSERT) 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_ASSERT(expr) \ 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!(expr)) { _STLP_PRIV __stl_debugger::_Assert( # expr, _STLP_FILE__, __LINE__); } 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 164e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 165e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_ASSERT(expr) 166e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// this section is for _STLP_DEBUG only 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG) 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_VERBOSE_ASSERT) 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fbp : new form not requiring ";" 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_VERBOSE_ASSERT(expr, __diag_num) \ 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (!(expr)) { _STLP_PRIV __stl_debugger::_VerboseAssert\ 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ( # expr, _STLP_PRIV __diag_num, _STLP_FILE__, __LINE__ ); \ 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_DEBUG_CHECK(expr) _STLP_ASSERT(expr) 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_STD_DEBUG_CHECK(expr) _STLP_DEBUG_CHECK(expr) 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_STD_DEBUG_CHECK(expr) 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_VERBOSE_RETURN) 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_VERBOSE_RETURN(__expr,__diag_num) if (!(__expr)) { \ 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __stl_debugger::_IndexedError(__diag_num, _STLP_FILE__ , __LINE__); \ 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; } 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_VERBOSE_RETURN_0) 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_VERBOSE_RETURN_0(__expr,__diag_num) if (!(__expr)) { \ 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __stl_debugger::_IndexedError(__diag_num, _STLP_FILE__, __LINE__); \ 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return 0; } 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_INTERNAL_THREADS_H 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_threads.h> 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# ifndef _STLP_INTERNAL_ITERATOR_BASE_H 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_iterator_base.h> 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 207e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# ifndef _STLP_TYPE_TRAITS_H 208e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# include <stl/type_traits.h> 209e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 210e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Special debug iterator traits having an additionnal static member 217e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott * method _Check. It is used by the slist debug implementation to check 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * the special before_begin iterator. 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Traits> 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _DbgTraits : _Traits { 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DbgTraits<typename _Traits::_ConstTraits> _ConstTraits; 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DbgTraits<typename _Traits::_NonConstTraits> _NonConstTraits; 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Iterator> 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block static bool _Check(const _Iterator&) {return true;} 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//============================================================= 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const random_access_iterator_tag&) 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (__i1 < __i2) || (__i1 == __i2); } 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const bidirectional_iterator_tag&) { 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // check if comparable 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __dummy(__i1==__i2); 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__dummy==__dummy); 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag&) { 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // check if comparable 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __dummy(__i1==__i2); 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__dummy==__dummy); 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __valid_range(const _Iterator&,const _Iterator&, 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag&) 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return true; } 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __valid_range(const _Iterator&,const _Iterator&, 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const output_iterator_tag&) 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return true; } 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __valid_range(const _Iterator& __i1, const _Iterator& __i2) 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __valid_range(__i1,__i2,_STLP_ITERATOR_CATEGORY(__i1, _Iterator)); } 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Note : that means in range [i1, i2]. 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 267e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline bool _STLP_CALL stlp_in_range(const _Iterator& _It, 268e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _Iterator& __i1, const _Iterator& __i2) 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __valid_range(__i1,_It) && __valid_range(_It,__i2); } 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 272e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scottinline bool _STLP_CALL stlp_in_range(const _Iterator& __first, const _Iterator& __last, 273e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _Iterator& __start, const _Iterator& __finish) 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __valid_range(__first,__last) && __valid_range(__start,__first) && __valid_range(__last,__finish); } 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//========================================================== 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC __owned_link { 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 279e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Note: This and the following special defines for compiling under Windows CE under ARM 280e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // is needed for correctly using _STLP_DEBUG mode. This comes from a bug in the ARM 281e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // compiler where checked iterators that are passed by value call _M_attach with the wrong 282e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // this pointer and calling _M_detach can't find the correct pointer to the __owned_link. 283e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // This is circumvented by managing a _M_self pointer that points to the correct value. 284e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott // Ugly but works. 285e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined(_STLP_WCE) && defined(_ARM_) 286e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __owned_link() : _M_self(this), _M_owner(0) {} 287e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __owned_link(const __owned_list* __c) : _M_self(this), _M_owner(0), _M_next(0) 288e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__c), this); } 289e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __owned_link(const __owned_link& __rhs): _M_self(this), _M_owner(0) 290e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__rhs._M_owner), this); } 291e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link() : _M_owner(0) {} 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link(const __owned_list* __c) : _M_owner(0), _M_next(0) 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__c), this); } 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link(const __owned_link& __rhs): _M_owner(0) 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__rhs._M_owner), this); } 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link& operator=(const __owned_link& __rhs) { 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list* __new_owner = __CONST_CAST(__owned_list*,__rhs._M_owner); 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list* __old_owner = _M_owner; 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if ( __old_owner != __new_owner ) { 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __stl_debugger::_M_detach(__old_owner, this); 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __stl_debugger::_M_attach(__new_owner, this); 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 307e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined(_STLP_WCE) && defined(_ARM_) 308e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~__owned_link() { 309e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __stl_debugger::_M_detach(_M_owner, _M_self); 310e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _Invalidate(); 311e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 312e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~__owned_link() { 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __stl_debugger::_M_detach(_M_owner, this); 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Invalidate(); 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 317e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_list* _Owner() const { return _M_owner; } 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list* _Owner() { return _M_owner; } 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Set_owner(const __owned_list* __o) { _M_owner= __CONST_CAST(__owned_list*,__o); } 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _Valid() const { return _M_owner != 0; } 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Invalidate() { _M_owner = 0; _M_next = 0; } 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Link_to_self() { _M_next = 0; } 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link* _Next() { return _M_next; } 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_link* _Next() const { return _M_next; } 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 330e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined(_STLP_WCE) && defined(_ARM_) 331e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __owned_link* _M_self; 332e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 333e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list* _M_owner; 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link* _M_next; 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _STLP_CLASS_DECLSPEC __owned_list { 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list(void* __o) { 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // fprintf(stderr, "__owned_list(): %p\n",(void*)this); 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node._M_owner = __REINTERPRET_CAST(__owned_list*,__o); 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node._M_next = 0; 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~__owned_list() { 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // fprintf(stderr, "~__owned_list(): %p\n",(void*)this); 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Invalidate_all(); 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // that prevents detach 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_node._Invalidate(); 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const void* _Owner() const { return (const void*)_M_node._M_owner; } 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void* _Owner() { return (void*)_M_node._M_owner; } 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _Valid() const { return _M_node._M_owner != 0; } 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Invalidate() { _M_node._M_owner = 0; } 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link* _First() { return _M_node._Next(); } 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link* _Last() { return 0 ; } 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_link* _First() const { return (__owned_link*)_M_node._M_next; } 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_link* _Last() const { return 0 ;} 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Verify() const { __stl_debugger::_Verify(this); } 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Swap_owners(__owned_list& __y) { __stl_debugger::_Swap_owners(*this, __y); } 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Invalidate_all() { __stl_debugger::_Invalidate_all(this); } 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _Set_owner(__owned_list& __y) { __stl_debugger::_Set_owner(*this, __y); } 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block mutable __owned_link _M_node; 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block mutable _STLP_mutex _M_lock; 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // should never be called, should be left not implemented, 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // but some compilers complain about it ;( 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list(const __owned_list&){} 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_list& operator = (const __owned_list&) { return *this; } 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block friend class __owned_link; 378e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott friend class __stl_debug_engine<bool>; 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//========================================================== 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// forward declaratioins 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL __check_range(const _Iterator&, const _Iterator&); 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL __check_range(const _Iterator&, 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator&, const _Iterator&); 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL __check_range(const _Iterator&, const _Iterator& , 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator&, const _Iterator& ); 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp> 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _STLP_CALL __check_ptr_range(const _Tp*, const _Tp*); 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _STLP_CALL __invalidate_range(const __owned_list* __base, 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator& __first, 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator& __last); 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _STLP_CALL __invalidate_iterator(const __owned_list* __base, 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator& __it); 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _STLP_CALL __change_range_owner(const _Iterator& __first, 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator& __last, 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_list* __dst); 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _STLP_CALL __change_ite_owner(const _Iterator& __it, 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __owned_list* __dst); 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//============================================================ 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__check_same_owner(const __owned_link& __i1, const __owned_link& __i2) 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __stl_debugger::_Check_same_owner(__i1,__i2); } 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__check_same_or_null_owner(const __owned_link& __i1, const __owned_link& __i2) 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __stl_debugger::_Check_same_or_null_owner(__i1,__i2); } 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __check_if_owner( const __owned_list* __owner, 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _Iterator& __it) 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __stl_debugger::_Check_if_owner(__owner, (const __owned_link&)__it); } 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool _STLP_CALL __check_if_not_owner( const __owned_list* __owner, 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const _Iterator& __it) 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __stl_debugger::_Check_if_not_owner(__owner, (const __owned_link&)__it); } 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 438e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 439e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_VERBOSE_ASSERT(expr, diagnostic) 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# define _STLP_DEBUG_CHECK(expr) 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_DEBUG */ 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_ASSERTIONS) 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_ASSERT_MSG_TRAILER) 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_ASSERT_MSG_TRAILER 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// dwa 12/30/98 - if _STLP_DEBUG_MESSAGE is defined, the user can supply own definition. 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_DEBUG_MESSAGE) 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __stl_debug_message __stl_debugger::_Message 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern void __stl_debug_message(const char * format_str, ...); 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// fbp: if _STLP_DEBUG_TERMINATE is defined, the user can supply own definition. 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_DEBUG_TERMINATE) 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __stl_debug_terminate __stl_debugger::_Terminate 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# else 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockextern void __stl_debug_terminate(); 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 465e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_ASSERTIONS) && !defined (_STLP_LINK_TIME_INSTANTIATION) 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/debug/_debug.c> 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* DEBUG_H */ 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 474