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