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_DBG_ITERATOR_H 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DBG_ITERATOR_H 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_PAIR_H 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_pair.h> 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALLOC_H 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_alloc.h> 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//============================================================ 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Decrement(_Iterator& __it, const bidirectional_iterator_tag &) 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ --__it; } 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Decrement(_Iterator& __it, const random_access_iterator_tag &) 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ --__it; } 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Decrement(_Iterator& __it, const forward_iterator_tag &) 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ _STLP_ASSERT(0) } 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Advance(_Iterator&, ptrdiff_t, const forward_iterator_tag &) 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ _STLP_ASSERT(0) } 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Advance(_Iterator& __it, ptrdiff_t, const bidirectional_iterator_tag &) 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ _STLP_ASSERT(0) } 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Advance(_Iterator& __it, ptrdiff_t __n, const random_access_iterator_tag &) 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ __it += __n; } 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptrdiff_t _DBG_distance(const _Iterator& __x, const _Iterator& __y, const random_access_iterator_tag &) 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __x - __y; } 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptrdiff_t _DBG_distance(const _Iterator&, const _Iterator&, const forward_iterator_tag &) { 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ASSERT(0) 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return 0; 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptrdiff_t _DBG_distance(const _Iterator&, const _Iterator&, const bidirectional_iterator_tag &) { 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ASSERT(0) 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return 0; 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _CompareIt(const _Iterator&, const _Iterator&, const forward_iterator_tag &) { 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ASSERT(0) 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _CompareIt(const _Iterator&, const _Iterator&, const bidirectional_iterator_tag &) { 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_ASSERT(0) 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return false; 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _CompareIt(const _Iterator& __x, const _Iterator& __y, const random_access_iterator_tag &) 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __x < __y; } 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _Dereferenceable(const _Iterator& __it) 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (__it._Get_container_ptr() != 0) && !(__it._M_iterator == (__it._Get_container_ptr())->end()); } 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _Incrementable(const _Iterator& __it, ptrdiff_t __n, const forward_iterator_tag &) 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return (__n == 1) && _Dereferenceable(__it); } 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _Incrementable(const _Iterator& __it, ptrdiff_t __n, const bidirectional_iterator_tag &) { 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::_Container_type __container_type; 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __container_type* __c = __it._Get_container_ptr(); 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__c != 0) && ((__n == 1 && __it._M_iterator != __c->end() ) || 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (__n == -1 && __it._M_iterator != __c->begin())); 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockbool _Incrementable(const _Iterator& __it, ptrdiff_t __n, const random_access_iterator_tag &) { 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Iterator::_Container_type __container_type; 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __container_type* __c = __it._Get_container_ptr(); 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__c == 0) return false; 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ptrdiff_t __new_pos = (__it._M_iterator - __c->begin()) + __n; 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__new_pos >= 0) && (__STATIC_CAST(typename __container_type::size_type, __new_pos) <= __c->size()); 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _DBG_iter_base : public __owned_link { 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::value_type value_type; 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::reference reference; 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::pointer pointer; 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //private: 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::iterator _Nonconst_iterator; 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::const_iterator _Const_iterator; 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Container _Container_type; 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_CLASS_PARTIAL_SPECIALIZATION 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename iterator_traits<_Const_iterator>::iterator_category _Iterator_category; 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::_Iterator_category _Iterator_category; 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Iterator_category iterator_category; 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_base() : __owned_link(0) {} 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_base(const __owned_list* __c, const _Const_iterator& __it) : 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(__HP_aCC) && (__HP_aCC < 60000) 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link(__c), _M_iterator(*__REINTERPRET_CAST(const _Nonconst_iterator *, &__it)) {} 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __owned_link(__c), _M_iterator(*(const _Nonconst_iterator*)&__it) {} 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Container* _Get_container_ptr() const { 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (_Container*)__stl_debugger::_Get_container_ptr(this); 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void __increment(); 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void __decrement(); 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void __advance(ptrdiff_t __n); 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// protected: 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Nonconst_iterator _M_iterator; 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void _DBG_iter_base<_Container>::__increment() { 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_Incrementable(*this, 1, _Iterator_category())) 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++_M_iterator; 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void _DBG_iter_base<_Container>::__decrement() { 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_Incrementable(*this, -1, _Iterator_category())) 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Decrement(_M_iterator, _Iterator_category()); 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline void _DBG_iter_base<_Container>::__advance(ptrdiff_t __n) { 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_Incrementable(*this, __n, _Iterator_category())) 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Advance(_M_iterator, __n, _Iterator_category()); 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockptrdiff_t operator-(const _DBG_iter_base<_Container>& __x, 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _DBG_iter_base<_Container>& __y ) { 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _DBG_iter_base<_Container>::_Iterator_category _Iterator_category; 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_same_owner(__x, __y)) 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _DBG_distance(__x._M_iterator,__y._M_iterator, _Iterator_category()); 1809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container, class _Traits> 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _DBG_iter_mid : public _DBG_iter_base<_Container> { 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DBG_iter_mid<_Container, typename _Traits::_NonConstTraits> _Nonconst_self; 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::iterator _Nonconst_iterator; 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::const_iterator _Const_iterator; 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_mid() {} 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit _DBG_iter_mid(const _Nonconst_self& __it) : 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_base<_Container>(__it) {} 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_mid(const __owned_list* __c, const _Const_iterator& __it) : 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_base<_Container>(__c, __it) {} 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container, class _Traits> 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _DBG_iter : public _DBG_iter_mid<_Container, _Traits> { 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DBG_iter_base<_Container> _Base; 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::value_type value_type; 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::difference_type difference_type; 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::reference reference; 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Traits::pointer pointer; 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::_Nonconst_iterator _Nonconst_iterator; 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::_Const_iterator _Const_iterator; 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DBG_iter<_Container, _Traits> _Self; 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DBG_iter_mid<_Container, typename _Traits::_NonConstTraits> _Nonconst_mid; 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifdef _STLP_CLASS_PARTIAL_SPECIALIZATION 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::iterator_category iterator_category; 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::_Iterator_category _Iterator_category; 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter() {} 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // boris : real type of iter would be nice 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter(const __owned_list* __c, const _Const_iterator& __it) : 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_mid<_Container, _Traits>(__c, __it) {} 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // This allows conversions from iterator to const_iterator without being 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // redundant with the copy constructor below. 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter(const _Nonconst_mid& __rhs) : 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_mid<_Container, _Traits>(__rhs) {} 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter(const _Self& __rhs) : 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter_mid<_Container, _Traits>(__rhs) {} 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // This allows conversions from iterator to const_iterator without being 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // redundant with the copy assignment operator below. 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Nonconst_mid& __rhs) { 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (_Base&)*this = __rhs; 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __rhs) { 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block (_Base&)*this = __rhs; 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference operator*() const; 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEFINE_ARROW_OPERATOR 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator++() { 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->__increment(); 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self operator++(int) { 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp = *this; 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->__increment(); 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator--() { 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->__decrement(); 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self operator--(int) { 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp = *this; 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->__decrement(); 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator+=(difference_type __n) { 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->__advance(__n); 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator-=(difference_type __n) { 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->__advance(-__n); 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self operator+(difference_type __n) const { 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp(*this); 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp.__advance(__n); 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self operator-(difference_type __n) const { 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self __tmp(*this); 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __tmp.__advance(-__n); 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp; 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference operator[](difference_type __n) const { return *(*this + __n); } 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container, class _Traits> 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NESTED_TYPE_PARAM_BUG) 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPENAME_ON_RETURN_TYPE _Traits::reference 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_TYPENAME_ON_RETURN_TYPE _DBG_iter<_Container, _Traits>::reference 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_DBG_iter<_Container, _Traits>::operator*() const { 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_Dereferenceable(*this)) 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(_Traits::_Check(*this)) 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this->_M_iterator; 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator==(const _DBG_iter_base<_Container>& __x, const _DBG_iter_base<_Container>& __y) { 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_same_or_null_owner(__x, __y)) 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __x._M_iterator == __y._M_iterator; 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<(const _DBG_iter_base<_Container>& __x, const _DBG_iter_base<_Container>& __y) { 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_same_or_null_owner(__x, __y)) 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _DBG_iter_base<_Container>::_Iterator_category _Category; 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _CompareIt(__x._M_iterator , __y._M_iterator, _Category()); 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>(const _DBG_iter_base<_Container>& __x, 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _DBG_iter_base<_Container>& __y) { 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _DBG_iter_base<_Container>::_Iterator_category _Category; 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _CompareIt(__y._M_iterator , __x._M_iterator, _Category()); 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator>=(const _DBG_iter_base<_Container>& __x, const _DBG_iter_base<_Container>& __y) { 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_same_or_null_owner(__x, __y)) 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _DBG_iter_base<_Container>::_Iterator_category _Category; 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return !_CompareIt(__x._M_iterator , __y._M_iterator, _Category()); 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator<=(const _DBG_iter_base<_Container>& __x, 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _DBG_iter_base<_Container>& __y) { 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _DBG_iter_base<_Container>::_Iterator_category _Category; 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return !_CompareIt(__y._M_iterator , __x._M_iterator, _Category()); 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline bool 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator!=(const _DBG_iter_base<_Container>& __x, 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const _DBG_iter_base<_Container>& __y) { 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_same_or_null_owner(__x, __y)) 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __x._M_iterator != __y._M_iterator; 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//------------------------------------------ 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container, class _Traits> 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _DBG_iter<_Container, _Traits> 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockoperator+(ptrdiff_t __n, const _DBG_iter<_Container, _Traits>& __it) { 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _DBG_iter<_Container, _Traits> __tmp(__it); 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __tmp += __n; 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Iterator> 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _Iterator _Non_Dbg_iter(_Iterator __it) 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __it; } 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container, class _Traits> 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline typename _DBG_iter<_Container, _Traits>::_Nonconst_iterator 368e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott_Non_Dbg_iter(const _DBG_iter<_Container, _Traits>& __it) 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ return __it._M_iterator; } 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Helper classes to check iterator range or pointer validity 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * at construction time. 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass __construct_checker { 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Container::value_type value_type; 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected: 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __construct_checker() {} 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __construct_checker(const value_type* __p) { 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_VERBOSE_ASSERT((__p != 0), _StlMsg_INVALID_ARGUMENT) 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __construct_checker(const _InputIter& __f, const _InputIter& __l) { 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIter>::_Ret _Integral; 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_check_dispatch(__f, __l, _Integral()); 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_check_dispatch(_Integer , _Integer, const __true_type& /*IsIntegral*/) {} 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_check_dispatch(const _InputIter& __f, const _InputIter& __l, const __false_type& /*IsIntegral*/) { 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_range(__f,__l)) 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION) 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __construct_checker(const value_type* __f, const value_type* __l) { 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_ptr_range(__f,__l)) 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _DBG_iter_base<_Container> _IteType; 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __construct_checker(const _IteType& __f, const _IteType& __l) { 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DEBUG_CHECK(__check_range(__f,__l)) 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 412e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (__BORLANDC__) 413e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott ~__construct_checker(){} 414e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_OLD_HP_ITERATOR_QUERIES) 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_NESTED_TYPE_PARAM_BUG) ||\ 419e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott (defined (__SUNPRO_CC) && __SUNPRO_CC < 0x600) 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define _STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS 1 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline ptrdiff_t* 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdistance_type(const _STLP_PRIV _DBG_iter_base<_Container>&) { return (ptrdiff_t*) 0; } 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS) 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _STLP_TYPENAME_ON_RETURN_TYPE _STLP_PRIV _DBG_iter_base<_Container>::value_type* 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvalue_type(const _STLP_PRIV _DBG_iter_base<_Container>&) { 433e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_TYPENAME _STLP_PRIV _DBG_iter_base<_Container>::value_type _Val; 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (_Val*)0; 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Container> 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockinline _STLP_TYPENAME_ON_RETURN_TYPE _STLP_PRIV _DBG_iter_base<_Container>::_Iterator_category 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockiterator_category(const _STLP_PRIV _DBG_iter_base<_Container>&) { 440e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _STLP_TYPENAME _STLP_PRIV _DBG_iter_base<_Container>::_Iterator_category _Category; 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _Category(); 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_USE_OLD_HP_ITERATOR_QUERIES */ 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* INTERNAL_H */ 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 458