177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997 477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Moscow Center for SPARC Technology 577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999 777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev 877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed 1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk. 1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted 1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies. 1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted, 1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was 1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice. 1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * 1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_DEBUG_H 2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_DEBUG_H 2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if (defined (_STLP_DEBUG) || defined (_STLP_DEBUG_ALLOC)) && \ 2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner !defined (_STLP_ASSERTIONS) 2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_ASSERTIONS 1 2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_ASSERTIONS) 2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_FILE__) 3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_FILE__ __FILE__ 3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerenum { 3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //General errors 4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlFormat_ERROR_RETURN, 4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlFormat_ASSERTION_FAILURE, 4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlFormat_VERBOSE_ASSERTION_FAILURE, 4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_ARGUMENT, 4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Container/Iterator related errors 4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_CONTAINER, 4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_EMPTY_CONTAINER, 4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_ERASE_PAST_THE_END, 4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_OUT_OF_BOUNDS, 4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_NOT_OWNER, 5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_SHOULD_NOT_OWNER, 5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_ITERATOR, 5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_LEFTHAND_ITERATOR, 5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_RIGHTHAND_ITERATOR, 5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DIFFERENT_OWNERS , 5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_NOT_DEREFERENCEABLE , 5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_RANGE , 5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_NOT_IN_RANGE_1 , 5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_NOT_IN_RANGE_2 , 5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_ADVANCE , 6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_SINGULAR_ITERATOR , 6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Bad predicate for sorting 6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_STRICT_WEAK_PREDICATE, 6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_INVALID_EQUIVALENT_PREDICATE, 6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // debug alloc messages 6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DBA_DELETED_TWICE , 6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DBA_NEVER_ALLOCATED , 6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DBA_TYPE_MISMATCH , 6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DBA_SIZE_MISMATCH , 6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DBA_UNDERRUN , 7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_DBA_OVERRUN , 7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // auto_ptr messages 7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_AUTO_PTR_NULL , 7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner //Memory alignent message 7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_WRONG_MEMORY_ALIGNMENT, 7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _StlMsg_UNKNOWN 7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner /* _StlMsg_MAX */ 7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* have to hardcode that ;() */ 8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _StlMsg_MAX 31 8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass __owned_link; 8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass __owned_list; 8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_DEBUG_MODE_THROWS) 8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_MESSAGE_NORETURN _STLP_FUNCTION_THROWS 8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_MESSAGE_NORETURN 8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Dummy> 9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass __stl_debug_engine { 9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Basic routine to report any debug message 9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Use _STLP_DEBUG_MESSAGE to override 9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_MESSAGE_NORETURN _STLP_CALL _Message(const char * format_str, ...); 9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Micsellanous function to report indexed error message 9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _IndexedError(int __ind, const char* __f, int __l); 10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Basic assertion report mechanism. 10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Reports failed assertion via __stl_debug_message and calls _Terminate 10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // if _STLP_DEBUG_TERMINATE is specified, calls __stl_debug_terminate instead 10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Assert(const char* __expr, const char* __f, int __l); 10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // The same, with additional diagnostics 10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _VerboseAssert(const char* __expr, int __error_ind, const char* __f, int __l); 10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // If exceptions are present, sends unique exception 11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // If not, calls _STLP_ABORT() to terminate 11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Use _STLP_DEBUG_TERMINATE to override 11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Terminate(); 11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_DEBUG) 11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // owned_list/link delegate non-inline functions here 11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool _STLP_CALL _Check_same_owner( const __owned_link& __i1, 11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_link& __i2); 11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool _STLP_CALL _Check_same_or_null_owner( const __owned_link& __i1, 12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_link& __i2); 12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool _STLP_CALL _Check_if_owner( const __owned_list*, const __owned_link&); 12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool _STLP_CALL _Check_if_not_owner( const __owned_list*, const __owned_link&); 12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Verify(const __owned_list*); 12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Swap_owners(__owned_list&, __owned_list&); 12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Invalidate_all(__owned_list*); 13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Set_owner(__owned_list& /*src*/, __owned_list& /*dst*/); 13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _Stamp_all(__owned_list*, __owned_list*); 13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _M_detach(__owned_list*, __owned_link*); 13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void _STLP_CALL _M_attach(__owned_list*, __owned_link*); 13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // accessor : check and get pointer to the container 14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static void* _STLP_CALL _Get_container_ptr(const __owned_link*); 14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // debug messages and formats 14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static const char* _Message_table[_StlMsg_MAX]; 14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# undef _STLP_MESSAGE_NORETURN 14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if defined (_STLP_USE_TEMPLATE_EXPORT) 15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_EXPORT_TEMPLATE_CLASS __stl_debug_engine<bool>; 15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertypedef __stl_debug_engine<bool> __stl_debugger; 15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_ASSERT) 16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_ASSERT(expr) \ 16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!(expr)) { _STLP_PRIV __stl_debugger::_Assert( # expr, _STLP_FILE__, __LINE__); } 16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_ASSERT(expr) 16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// this section is for _STLP_DEBUG only 16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DEBUG) 17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_VERBOSE_ASSERT) 17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// fbp : new form not requiring ";" 17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_VERBOSE_ASSERT(expr, __diag_num) \ 17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if (!(expr)) { _STLP_PRIV __stl_debugger::_VerboseAssert\ 17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ( # expr, _STLP_PRIV __diag_num, _STLP_FILE__, __LINE__ ); \ 17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_DEBUG_CHECK(expr) _STLP_ASSERT(expr) 18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_STD_DEBUG_CHECK(expr) _STLP_DEBUG_CHECK(expr) 18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_STD_DEBUG_CHECK(expr) 18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_VERBOSE_RETURN) 18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_VERBOSE_RETURN(__expr,__diag_num) if (!(__expr)) { \ 18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV __stl_debugger::_IndexedError(__diag_num, _STLP_FILE__ , __LINE__); \ 19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return false; } 19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_VERBOSE_RETURN_0) 19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_VERBOSE_RETURN_0(__expr,__diag_num) if (!(__expr)) { \ 19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _STLP_PRIV __stl_debugger::_IndexedError(__diag_num, _STLP_FILE__, __LINE__); \ 19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return 0; } 19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_INTERNAL_THREADS_H 20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_threads.h> 20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_INTERNAL_ITERATOR_BASE_H 20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/_iterator_base.h> 20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# ifndef _STLP_TYPE_TRAITS_H 20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/type_traits.h> 20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE 21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE 21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* 21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Special debug iterator traits having an additionnal static member 21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * method _Check. It is used by the slist debug implementation to check 21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * the special before_begin iterator. 21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */ 22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Traits> 22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerstruct _DbgTraits : _Traits { 22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _DbgTraits<typename _Traits::_ConstTraits> _ConstTraits; 22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner typedef _DbgTraits<typename _Traits::_NonConstTraits> _NonConstTraits; 22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner template <class _Iterator> 22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner static bool _Check(const _Iterator&) {return true;} 22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//============================================================= 23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const random_access_iterator_tag&) 23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (__i1 < __i2) || (__i1 == __i2); } 23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const bidirectional_iterator_tag&) { 23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // check if comparable 23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool __dummy(__i1==__i2); 24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return (__dummy==__dummy); 24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __valid_range(const _Iterator& __i1 ,const _Iterator& __i2, 24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const forward_iterator_tag&) { 24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // check if comparable 24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool __dummy(__i1==__i2); 24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return (__dummy==__dummy); 24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner} 25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __valid_range(const _Iterator&,const _Iterator&, 25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const input_iterator_tag&) 25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return true; } 25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __valid_range(const _Iterator&,const _Iterator&, 25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const output_iterator_tag&) 25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return true; } 26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __valid_range(const _Iterator& __i1, const _Iterator& __i2) 26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __valid_range(__i1,__i2,_STLP_ITERATOR_CATEGORY(__i1, _Iterator)); } 26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Note : that means in range [i1, i2]. 26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL stlp_in_range(const _Iterator& _It, 26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __i1, const _Iterator& __i2) 26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __valid_range(__i1,_It) && __valid_range(_It,__i2); } 27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL stlp_in_range(const _Iterator& __first, const _Iterator& __last, 27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __start, const _Iterator& __finish) 27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __valid_range(__first,__last) && __valid_range(__start,__first) && __valid_range(__last,__finish); } 27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//========================================================== 27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC __owned_link { 27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Note: This and the following special defines for compiling under Windows CE under ARM 28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // is needed for correctly using _STLP_DEBUG mode. This comes from a bug in the ARM 28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // compiler where checked iterators that are passed by value call _M_attach with the wrong 28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // this pointer and calling _M_detach can't find the correct pointer to the __owned_link. 28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // This is circumvented by managing a _M_self pointer that points to the correct value. 28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // Ugly but works. 28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined(_STLP_WCE) && defined(_ARM_) 28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link() : _M_self(this), _M_owner(0) {} 28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link(const __owned_list* __c) : _M_self(this), _M_owner(0), _M_next(0) 28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__c), this); } 28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link(const __owned_link& __rhs): _M_self(this), _M_owner(0) 29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__rhs._M_owner), this); } 29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link() : _M_owner(0) {} 29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link(const __owned_list* __c) : _M_owner(0), _M_next(0) 29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__c), this); } 29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link(const __owned_link& __rhs): _M_owner(0) 29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner { __stl_debugger::_M_attach(__CONST_CAST(__owned_list*,__rhs._M_owner), this); } 29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link& operator=(const __owned_link& __rhs) { 29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list* __new_owner = __CONST_CAST(__owned_list*,__rhs._M_owner); 30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list* __old_owner = _M_owner; 30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner if ( __old_owner != __new_owner ) { 30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __stl_debugger::_M_detach(__old_owner, this); 30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __stl_debugger::_M_attach(__new_owner, this); 30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner return *this; 30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined(_STLP_WCE) && defined(_ARM_) 30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~__owned_link() { 30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __stl_debugger::_M_detach(_M_owner, _M_self); 31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Invalidate(); 31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~__owned_link() { 31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __stl_debugger::_M_detach(_M_owner, this); 31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Invalidate(); 31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 31877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 31977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_list* _Owner() const { return _M_owner; } 32077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list* _Owner() { return _M_owner; } 32177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Set_owner(const __owned_list* __o) { _M_owner= __CONST_CAST(__owned_list*,__o); } 32277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool _Valid() const { return _M_owner != 0; } 32377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Invalidate() { _M_owner = 0; _M_next = 0; } 32477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Link_to_self() { _M_next = 0; } 32577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link* _Next() { return _M_next; } 32777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_link* _Next() const { return _M_next; } 32877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 32977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 33077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined(_STLP_WCE) && defined(_ARM_) 33177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link* _M_self; 33277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 33377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list* _M_owner; 33577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link* _M_next; 33677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 33777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 33977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _STLP_CLASS_DECLSPEC __owned_list { 34077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic: 34177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list(void* __o) { 34277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // fprintf(stderr, "__owned_list(): %p\n",(void*)this); 34377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_node._M_owner = __REINTERPRET_CAST(__owned_list*,__o); 34477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_node._M_next = 0; 34577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 34677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner ~__owned_list() { 34777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // fprintf(stderr, "~__owned_list(): %p\n",(void*)this); 34877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _Invalidate_all(); 34977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // that prevents detach 35077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner _M_node._Invalidate(); 35177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner } 35277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const void* _Owner() const { return (const void*)_M_node._M_owner; } 35377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void* _Owner() { return (void*)_M_node._M_owner; } 35477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner bool _Valid() const { return _M_node._M_owner != 0; } 35577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Invalidate() { _M_node._M_owner = 0; } 35677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 35777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link* _First() { return _M_node._Next(); } 35877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_link* _Last() { return 0 ; } 35977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_link* _First() const { return (__owned_link*)_M_node._M_next; } 36177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_link* _Last() const { return 0 ;} 36277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Verify() const { __stl_debugger::_Verify(this); } 36477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Swap_owners(__owned_list& __y) { __stl_debugger::_Swap_owners(*this, __y); } 36577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Invalidate_all() { __stl_debugger::_Invalidate_all(this); } 36677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner void _Set_owner(__owned_list& __y) { __stl_debugger::_Set_owner(*this, __y); } 36777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 36877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mutable __owned_link _M_node; 36977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner mutable _STLP_mutex _M_lock; 37077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate: 37277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // should never be called, should be left not implemented, 37377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner // but some compilers complain about it ;( 37477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list(const __owned_list&){} 37577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner __owned_list& operator = (const __owned_list&) { return *this; } 37677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 37777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend class __owned_link; 37877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner friend class __stl_debug_engine<bool>; 37977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner}; 38077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//========================================================== 38377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// forward declaratioins 38577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 38677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 38777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool _STLP_CALL __check_range(const _Iterator&, const _Iterator&); 38877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 38977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool _STLP_CALL __check_range(const _Iterator&, 39077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator&, const _Iterator&); 39177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 39277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool _STLP_CALL __check_range(const _Iterator&, const _Iterator& , 39377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator&, const _Iterator& ); 39477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Tp> 39577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerbool _STLP_CALL __check_ptr_range(const _Tp*, const _Tp*); 39677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 39777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 39877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid _STLP_CALL __invalidate_range(const __owned_list* __base, 39977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __first, 40077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __last); 40177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 40277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 40377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid _STLP_CALL __invalidate_iterator(const __owned_list* __base, 40477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __it); 40577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 40677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 40777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid _STLP_CALL __change_range_owner(const _Iterator& __first, 40877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __last, 40977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_list* __dst); 41077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 41177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 41277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervoid _STLP_CALL __change_ite_owner(const _Iterator& __it, 41377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const __owned_list* __dst); 41477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 41577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner//============================================================ 41677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL 41777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__check_same_owner(const __owned_link& __i1, const __owned_link& __i2) 41877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __stl_debugger::_Check_same_owner(__i1,__i2); } 41977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL 42177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner__check_same_or_null_owner(const __owned_link& __i1, const __owned_link& __i2) 42277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __stl_debugger::_Check_same_or_null_owner(__i1,__i2); } 42377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 42577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __check_if_owner( const __owned_list* __owner, 42677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __it) 42777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __stl_debugger::_Check_if_owner(__owner, (const __owned_link&)__it); } 42877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 42977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Iterator> 43077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bool _STLP_CALL __check_if_not_owner( const __owned_list* __owner, 43177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner const _Iterator& __it) 43277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return __stl_debugger::_Check_if_not_owner(__owner, (const __owned_link&)__it); } 43377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE 43577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE 43777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 43877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else 43977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_VERBOSE_ASSERT(expr, diagnostic) 44077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_DEBUG_CHECK(expr) 44177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_DEBUG */ 44277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_ASSERTIONS) 44477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_ASSERT_MSG_TRAILER) 44677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define _STLP_ASSERT_MSG_TRAILER 44777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 44877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 44977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// dwa 12/30/98 - if _STLP_DEBUG_MESSAGE is defined, the user can supply own definition. 45077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_DEBUG_MESSAGE) 45177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define __stl_debug_message __stl_debugger::_Message 45277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 45377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerextern void __stl_debug_message(const char * format_str, ...); 45477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 45577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 45677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// fbp: if _STLP_DEBUG_TERMINATE is defined, the user can supply own definition. 45777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# if !defined (_STLP_DEBUG_TERMINATE) 45877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# define __stl_debug_terminate __stl_debugger::_Terminate 45977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# else 46077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerextern void __stl_debug_terminate(); 46177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# endif 46277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 46477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_ASSERTIONS) && !defined (_STLP_LINK_TIME_INSTANTIATION) 46677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner# include <stl/debug/_debug.c> 46777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif 46877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 46977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* DEBUG_H */ 47077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner 47177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables: 47277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++ 47377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End: 474