111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1997 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Moscow Center for SPARC Technology 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_DEBUG_H 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_DEBUG_H 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if (defined (_STLP_DEBUG) || defined (_STLP_DEBUG_ALLOC)) && \ 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert !defined (_STLP_ASSERTIONS) 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_ASSERTIONS 1 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_ASSERTIONS) 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_FILE__) 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_FILE__ __FILE__ 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_MOVE_TO_PRIV_NAMESPACE 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum { 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //General errors 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlFormat_ERROR_RETURN, 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlFormat_ASSERTION_FAILURE, 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlFormat_VERBOSE_ASSERTION_FAILURE, 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_ARGUMENT, 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Container/Iterator related errors 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_CONTAINER, 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_EMPTY_CONTAINER, 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_ERASE_PAST_THE_END, 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_OUT_OF_BOUNDS, 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_NOT_OWNER, 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_SHOULD_NOT_OWNER, 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_ITERATOR, 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_LEFTHAND_ITERATOR, 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_RIGHTHAND_ITERATOR, 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DIFFERENT_OWNERS , 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_NOT_DEREFERENCEABLE , 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_RANGE , 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_NOT_IN_RANGE_1 , 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_NOT_IN_RANGE_2 , 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_ADVANCE , 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_SINGULAR_ITERATOR , 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Bad predicate for sorting 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_STRICT_WEAK_PREDICATE, 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_INVALID_EQUIVALENT_PREDICATE, 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // debug alloc messages 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DBA_DELETED_TWICE , 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DBA_NEVER_ALLOCATED , 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DBA_TYPE_MISMATCH , 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DBA_SIZE_MISMATCH , 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DBA_UNDERRUN , 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_DBA_OVERRUN , 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // auto_ptr messages 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_AUTO_PTR_NULL , 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Memory alignent message 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_WRONG_MEMORY_ALIGNMENT, 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _StlMsg_UNKNOWN 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert /* _StlMsg_MAX */ 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* have to hardcode that ;() */ 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _StlMsg_MAX 31 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass __owned_link; 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass __owned_list; 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_DEBUG_MODE_THROWS) 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_MESSAGE_NORETURN _STLP_FUNCTION_THROWS 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# else 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_MESSAGE_NORETURN 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Dummy> 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass __stl_debug_engine { 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Basic routine to report any debug message 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Use _STLP_DEBUG_MESSAGE to override 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_MESSAGE_NORETURN _STLP_CALL _Message(const char * format_str, ...); 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Micsellanous function to report indexed error message 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _IndexedError(int __ind, const char* __f, int __l); 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Basic assertion report mechanism. 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Reports failed assertion via __stl_debug_message and calls _Terminate 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // if _STLP_DEBUG_TERMINATE is specified, calls __stl_debug_terminate instead 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Assert(const char* __expr, const char* __f, int __l); 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // The same, with additional diagnostics 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _VerboseAssert(const char* __expr, int __error_ind, const char* __f, int __l); 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // If exceptions are present, sends unique exception 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // If not, calls _STLP_ABORT() to terminate 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Use _STLP_DEBUG_TERMINATE to override 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Terminate(); 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_DEBUG) 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // owned_list/link delegate non-inline functions here 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static bool _STLP_CALL _Check_same_owner( const __owned_link& __i1, 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_link& __i2); 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static bool _STLP_CALL _Check_same_or_null_owner( const __owned_link& __i1, 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_link& __i2); 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static bool _STLP_CALL _Check_if_owner( const __owned_list*, const __owned_link&); 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static bool _STLP_CALL _Check_if_not_owner( const __owned_list*, const __owned_link&); 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Verify(const __owned_list*); 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Swap_owners(__owned_list&, __owned_list&); 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Invalidate_all(__owned_list*); 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Set_owner(__owned_list& /*src*/, __owned_list& /*dst*/); 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _Stamp_all(__owned_list*, __owned_list*); 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _M_detach(__owned_list*, __owned_link*); 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void _STLP_CALL _M_attach(__owned_list*, __owned_link*); 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // accessor : check and get pointer to the container 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static void* _STLP_CALL _Get_container_ptr(const __owned_link*); 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // debug messages and formats 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static const char* _Message_table[_StlMsg_MAX]; 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# undef _STLP_MESSAGE_NORETURN 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_USE_TEMPLATE_EXPORT) 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_EXPORT_TEMPLATE_CLASS __stl_debug_engine<bool>; 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef __stl_debug_engine<bool> __stl_debugger; 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_MOVE_TO_STD_NAMESPACE 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_ASSERT) 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_ASSERT(expr) \ 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (!(expr)) { _STLP_PRIV __stl_debugger::_Assert( # expr, _STLP_FILE__, __LINE__); } 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_ASSERT(expr) 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// this section is for _STLP_DEBUG only 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DEBUG) 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_VERBOSE_ASSERT) 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// fbp : new form not requiring ";" 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_VERBOSE_ASSERT(expr, __diag_num) \ 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (!(expr)) { _STLP_PRIV __stl_debugger::_VerboseAssert\ 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ( # expr, _STLP_PRIV __diag_num, _STLP_FILE__, __LINE__ ); \ 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_DEBUG_CHECK(expr) _STLP_ASSERT(expr) 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_STD_DEBUG_CHECK(expr) _STLP_DEBUG_CHECK(expr) 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# else 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_STD_DEBUG_CHECK(expr) 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_VERBOSE_RETURN) 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_VERBOSE_RETURN(__expr,__diag_num) if (!(__expr)) { \ 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __stl_debugger::_IndexedError(__diag_num, _STLP_FILE__ , __LINE__); \ 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return false; } 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_VERBOSE_RETURN_0) 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_VERBOSE_RETURN_0(__expr,__diag_num) if (!(__expr)) { \ 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __stl_debugger::_IndexedError(__diag_num, _STLP_FILE__, __LINE__); \ 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return 0; } 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# ifndef _STLP_INTERNAL_THREADS_H 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_threads.h> 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# ifndef _STLP_INTERNAL_ITERATOR_BASE_H 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/_iterator_base.h> 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# ifndef _STLP_TYPE_TRAITS_H 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/type_traits.h> 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_MOVE_TO_PRIV_NAMESPACE 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Special debug iterator traits having an additionnal static member 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * method _Check. It is used by the slist debug implementation to check 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * the special before_begin iterator. 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Traits> 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct _DbgTraits : _Traits { 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _DbgTraits<typename _Traits::_ConstTraits> _ConstTraits; 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _DbgTraits<typename _Traits::_NonConstTraits> _NonConstTraits; 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _Iterator> 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert static bool _Check(const _Iterator&) {return true;} 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//============================================================= 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const random_access_iterator_tag&) 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return (__i1 < __i2) || (__i1 == __i2); } 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const bidirectional_iterator_tag&) { 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // check if comparable 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool __dummy(__i1==__i2); 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return (__dummy==__dummy); 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const forward_iterator_tag&) { 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // check if comparable 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool __dummy(__i1==__i2); 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return (__dummy==__dummy); 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert} 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __valid_range(const _Iterator&,const _Iterator&, 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const input_iterator_tag&) 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return true; } 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __valid_range(const _Iterator&,const _Iterator&, 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const output_iterator_tag&) 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return true; } 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __valid_range(const _Iterator& __i1, const _Iterator& __i2) 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __valid_range(__i1,__i2,_STLP_ITERATOR_CATEGORY(__i1, _Iterator)); } 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Note : that means in range [i1, i2]. 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL stlp_in_range(const _Iterator& _It, 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __i1, const _Iterator& __i2) 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __valid_range(__i1,_It) && __valid_range(_It,__i2); } 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL stlp_in_range(const _Iterator& __first, const _Iterator& __last, 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __start, const _Iterator& __finish) 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __valid_range(__first,__last) && __valid_range(__start,__first) && __valid_range(__last,__finish); } 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//========================================================== 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC __owned_link { 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Note: This and the following special defines for compiling under Windows CE under ARM 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // is needed for correctly using _STLP_DEBUG mode. This comes from a bug in the ARM 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // compiler where checked iterators that are passed by value call _M_attach with the wrong 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // this pointer and calling _M_detach can't find the correct pointer to the __owned_link. 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // This is circumvented by managing a _M_self pointer that points to the correct value. 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Ugly but works. 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_STLP_WCE) && defined(_ARM_) 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link() : _M_self(this), _M_owner(0) {} 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link(const __owned_list* __c) : _M_self(this), _M_owner(0), _M_next(0) 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__c), this); } 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link(const __owned_link& __rhs): _M_self(this), _M_owner(0) 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__rhs._M_owner), this); } 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link() : _M_owner(0) {} 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link(const __owned_list* __c) : _M_owner(0), _M_next(0) 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__c), this); } 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link(const __owned_link& __rhs): _M_owner(0) 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__rhs._M_owner), this); } 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link& operator=(const __owned_link& __rhs) { 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list* __new_owner = __CONST_CAST(__owned_list*,__rhs._M_owner); 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list* __old_owner = _M_owner; 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if ( __old_owner != __new_owner ) { 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __stl_debugger::_M_detach(__old_owner, this); 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __stl_debugger::_M_attach(__new_owner, this); 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_STLP_WCE) && defined(_ARM_) 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~__owned_link() { 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __stl_debugger::_M_detach(_M_owner, _M_self); 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate(); 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~__owned_link() { 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __stl_debugger::_M_detach(_M_owner, this); 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate(); 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_list* _Owner() const { return _M_owner; } 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list* _Owner() { return _M_owner; } 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Set_owner(const __owned_list* __o) { _M_owner= __CONST_CAST(__owned_list*,__o); } 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool _Valid() const { return _M_owner != 0; } 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate() { _M_owner = 0; _M_next = 0; } 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Link_to_self() { _M_next = 0; } 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link* _Next() { return _M_next; } 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_link* _Next() const { return _M_next; } 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined(_STLP_WCE) && defined(_ARM_) 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link* _M_self; 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list* _M_owner; 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link* _M_next; 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass _STLP_CLASS_DECLSPEC __owned_list { 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list(void* __o) { 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // fprintf(stderr, "__owned_list(): %p\n",(void*)this); 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_node._M_owner = __REINTERPRET_CAST(__owned_list*,__o); 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_node._M_next = 0; 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert ~__owned_list() { 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // fprintf(stderr, "~__owned_list(): %p\n",(void*)this); 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // that prevents detach 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_node._Invalidate(); 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const void* _Owner() const { return (const void*)_M_node._M_owner; } 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void* _Owner() { return (void*)_M_node._M_owner; } 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool _Valid() const { return _M_node._M_owner != 0; } 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate() { _M_node._M_owner = 0; } 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link* _First() { return _M_node._Next(); } 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_link* _Last() { return 0 ; } 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_link* _First() const { return (__owned_link*)_M_node._M_next; } 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_link* _Last() const { return 0 ;} 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Verify() const { __stl_debugger::_Verify(this); } 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Swap_owners(__owned_list& __y) { __stl_debugger::_Swap_owners(*this, __y); } 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate_all() { __stl_debugger::_Invalidate_all(this); } 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Set_owner(__owned_list& __y) { __stl_debugger::_Set_owner(*this, __y); } 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mutable __owned_link _M_node; 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert mutable _STLP_mutex _M_lock; 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprivate: 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // should never be called, should be left not implemented, 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // but some compilers complain about it ;( 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list(const __owned_list&){} 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __owned_list& operator = (const __owned_list&) { return *this; } 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert friend class __owned_link; 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert friend class __stl_debug_engine<bool>; 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//========================================================== 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// forward declaratioins 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool _STLP_CALL __check_range(const _Iterator&, const _Iterator&); 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool _STLP_CALL __check_range(const _Iterator&, 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator&, const _Iterator&); 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool _STLP_CALL __check_range(const _Iterator&, const _Iterator& , 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator&, const _Iterator& ); 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp> 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertbool _STLP_CALL __check_ptr_range(const _Tp*, const _Tp*); 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid _STLP_CALL __invalidate_range(const __owned_list* __base, 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __first, 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __last); 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid _STLP_CALL __invalidate_iterator(const __owned_list* __base, 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __it); 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid _STLP_CALL __change_range_owner(const _Iterator& __first, 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __last, 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_list* __dst); 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid _STLP_CALL __change_ite_owner(const _Iterator& __it, 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const __owned_list* __dst); 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert//============================================================ 41611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL 41711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__check_same_owner(const __owned_link& __i1, const __owned_link& __i2) 41811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __stl_debugger::_Check_same_owner(__i1,__i2); } 41911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL 42111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert__check_same_or_null_owner(const __owned_link& __i1, const __owned_link& __i2) 42211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __stl_debugger::_Check_same_or_null_owner(__i1,__i2); } 42311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 42511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __check_if_owner( const __owned_list* __owner, 42611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __it) 42711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __stl_debugger::_Check_if_owner(__owner, (const __owned_link&)__it); } 42811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 42911cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Iterator> 43011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline bool _STLP_CALL __check_if_not_owner( const __owned_list* __owner, 43111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const _Iterator& __it) 43211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return __stl_debugger::_Check_if_not_owner(__owner, (const __owned_link&)__it); } 43311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_MOVE_TO_STD_NAMESPACE 43511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 43711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 43811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 43911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_VERBOSE_ASSERT(expr, diagnostic) 44011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_DEBUG_CHECK(expr) 44111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_DEBUG */ 44211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_ASSERTIONS) 44411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_ASSERT_MSG_TRAILER) 44611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define _STLP_ASSERT_MSG_TRAILER 44711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 44811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 44911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// dwa 12/30/98 - if _STLP_DEBUG_MESSAGE is defined, the user can supply own definition. 45011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_DEBUG_MESSAGE) 45111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define __stl_debug_message __stl_debugger::_Message 45211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# else 45311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern void __stl_debug_message(const char * format_str, ...); 45411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 45511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 45611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// fbp: if _STLP_DEBUG_TERMINATE is defined, the user can supply own definition. 45711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if !defined (_STLP_DEBUG_TERMINATE) 45811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# define __stl_debug_terminate __stl_debugger::_Terminate 45911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# else 46011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern void __stl_debug_terminate(); 46111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 46211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 46411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_ASSERTIONS) && !defined (_STLP_LINK_TIME_INSTANTIATION) 46611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/debug/_debug.c> 46711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 46811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 46911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* DEBUG_H */ 47011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 47111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables: 47211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++ 47311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End: 474