177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/*
277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1994
477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Hewlett-Packard Company
577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1996,1997
777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Silicon Graphics Computer Systems, Inc.
877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1997
1077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Moscow Center for SPARC Technology
1177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Copyright (c) 1999
1377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Boris Fomitchev
1477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * This material is provided "as is", with absolutely no warranty expressed
1677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * or implied. Any use is at your own risk.
1777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
1877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to use or copy this software for any purpose is hereby granted
1977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * without fee, provided the above notices are retained on all copies.
2077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * Permission to modify the code and to distribute modified code is granted,
2177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * provided the above notices are retained, and a notice that the code was
2277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner * modified is included with the above copyright notice.
2377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *
2477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
2577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
2677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner/* NOTE: This is an internal header file, included by other STL headers.
2777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner *   You should not attempt to use it directly.
2877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner */
2977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_DBG_TREE_H
3177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_INTERNAL_DBG_TREE_H
3277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_DBG_ITERATOR_H
3477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/debug/_iterator.h>
3577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
3677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
3777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_FUNCTION_BASE_H
3877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_function_base.h>
3977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#ifndef _STLP_INTERNAL_ALLOC_H
4277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  include <stl/_alloc.h>
4377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
4477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_BEGIN_NAMESPACE
4677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
4877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
4977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Key, class _Compare>
5077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _DbgCompare {
5177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
5277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _DbgCompare() {}
5377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _DbgCompare(const _Compare& __cmp) : _M_non_dbg_cmp(__cmp) {}
5477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _DbgCompare(const _DbgCompare& __cmp) : _M_non_dbg_cmp(__cmp._M_non_dbg_cmp) {}
5577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
5677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_USE_CONTAINERS_EXTENSION)
5777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool operator () (const _Key& __lhs, const _Key& __rhs) const {
5877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
5977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template <class _Kp1, class _Kp2>
6077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool operator () (const _Kp1& __lhs, const _Kp2& __rhs) const {
6177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
6277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (_M_non_dbg_cmp(__lhs, __rhs)) {
6377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      return true;
6477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
6577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return false;
6677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
6777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
6877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Compare non_dbg_key_comp() const { return _M_non_dbg_cmp; }
6977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
7077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Compare _M_non_dbg_cmp;
7177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
7277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#define _STLP_NON_DBG_TREE _STLP_PRIV _STLP_NON_DBG_NAME(Rb_tree) <_Key, _STLP_PRIV _DbgCompare<_Key, _Compare>, _Value, _KeyOfValue, _Traits, _Alloc>
7477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
7577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS)
7677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
7777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Key, class _Compare,
7877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Value, class _KeyOfValue, class _Traits, class _Alloc >
7977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline _Value*
8077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnervalue_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_TREE >&)
8177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return (_Value*)0; }
8277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Key, class _Compare,
8377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Value, class _KeyOfValue, class _Traits, class _Alloc >
8477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerinline bidirectional_iterator_tag
8577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turneriterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_TREE >&)
8677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner{ return bidirectional_iterator_tag(); }
8777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_PRIV_NAMESPACE
8877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
8977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnertemplate <class _Key, class _Compare,
9177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          class _Value, class _KeyOfValue, class _Traits,
9277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner          _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Value>) >
9377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerclass _Rb_tree {
9477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_NON_DBG_TREE _Base;
9577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _Rb_tree<_Key, _Compare, _Value, _KeyOfValue, _Traits, _Alloc> _Self;
9677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Base _M_non_dbg_impl;
9777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_PRIV __owned_list _M_iter_list;
9877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
9977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
10077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  __IMPORT_CONTAINER_TYPEDEFS(_Base)
10177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Base::key_type key_type;
10277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::_NonConstTraits _NonConstIteTraits;
10477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Traits::_ConstTraits    _ConstIteTraits;
10577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_NonConstIteTraits> > iterator;
10677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_ConstIteTraits> >    const_iterator;
10777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
10877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_DECLARE_BIDIRECTIONAL_REVERSE_ITERATORS;
10977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerprivate:
11177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_KEY_TYPE_FOR_CONT_EXT(key_type)
11277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Invalidate_iterator(const iterator& __it)
11377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _STLP_PRIV __invalidate_iterator(&_M_iter_list,__it); }
11477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void _Invalidate_iterators(const iterator& __first, const iterator& __last)
11577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { _STLP_PRIV __invalidate_range(&_M_iter_list, __first, __last); }
11677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
11777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Base::iterator _Base_iterator;
11877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  typedef typename _Base::const_iterator _Base_const_iterator;
11977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
12077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turnerpublic:
12177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Rb_tree()
12277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(), _M_iter_list(&_M_non_dbg_impl) {}
12377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Rb_tree(const _Compare& __comp)
12477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__comp), _M_iter_list(&_M_non_dbg_impl) {}
12577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Rb_tree(const _Compare& __comp, const allocator_type& __a)
12677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__comp, __a), _M_iter_list(&_M_non_dbg_impl) {}
12777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Rb_tree(const _Self& __x)
12877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    : _M_non_dbg_impl(__x._M_non_dbg_impl), _M_iter_list(&_M_non_dbg_impl) {}
12977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
13077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if !defined (_STLP_NO_MOVE_SEMANTIC)
13177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Rb_tree(__move_source<_Self> src):
13277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl(__move_source<_Base>(src.get()._M_non_dbg_impl)),
13377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_iter_list(&_M_non_dbg_impl) {
13477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL)
13577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    src.get()._M_iter_list._Invalidate_all();
13677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  else
13777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    src.get()._M_iter_list._Set_owner(_M_iter_list);
13877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#  endif
13977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
14077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
14177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  ~_Rb_tree() {}
14377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
14477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Self& operator=(const _Self& __x) {
14577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (this != &__x) {
14677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      //Should not invalidate end iterator:
14777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_iterators(begin(), end());
14877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl = __x._M_non_dbg_impl;
14977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
15077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return *this;
15177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
15277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); }
15477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _Compare key_comp() const { return _M_non_dbg_impl.key_comp().non_dbg_key_comp(); }
15577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
15677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
15777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); }
15877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
15977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); }
16077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reverse_iterator rbegin() { return reverse_iterator(end()); }
16277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); }
16377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  reverse_iterator rend() { return reverse_iterator(begin()); }
16477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_reverse_iterator rend() const { return const_reverse_iterator(begin()); }
16577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
16677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  bool empty() const { return _M_non_dbg_impl.empty(); }
16777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type size() const { return _M_non_dbg_impl.size(); }
16877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type max_size() const { return _M_non_dbg_impl.max_size(); }
16977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
17077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type count(const _KT& __x) const { return _M_non_dbg_impl.count(__x); }
17177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void swap(_Self& __t) {
17377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.swap(__t._M_non_dbg_impl);
17477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_iter_list._Swap_owners(__t._M_iter_list);
17577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
17677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
17777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
17877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator find(const _KT& __k)
17977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return iterator(&_M_iter_list, _M_non_dbg_impl.find(__k)); }
18077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
18177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator find(const _KT& __k) const
18277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return const_iterator(&_M_iter_list, _M_non_dbg_impl.find(__k)); }
18377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
18477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
18577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator lower_bound(const _KT& __x)
18677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return iterator(&_M_iter_list, _M_non_dbg_impl.lower_bound(__x)); }
18777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
18877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator lower_bound(const _KT& __x) const
18977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return const_iterator(&_M_iter_list, _M_non_dbg_impl.lower_bound(__x)); }
19077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
19277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator upper_bound(const _KT& __x)
19377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return iterator(&_M_iter_list, _M_non_dbg_impl.upper_bound(__x)); }
19477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
19577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  const_iterator upper_bound(const _KT& __x) const
19677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return const_iterator(&_M_iter_list, _M_non_dbg_impl.upper_bound(__x)); }
19777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
19877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
19977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  pair<iterator,iterator> equal_range(const _KT& __x) {
20077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return pair<iterator, iterator>(iterator(&_M_iter_list, _M_non_dbg_impl.lower_bound(__x)),
20177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                    iterator(&_M_iter_list, _M_non_dbg_impl.upper_bound(__x)));
20277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
20377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
20477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  pair<const_iterator, const_iterator> equal_range(const _KT& __x) const {
20577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return pair<const_iterator,const_iterator>(const_iterator(&_M_iter_list, _M_non_dbg_impl.lower_bound(__x)),
20677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                               const_iterator(&_M_iter_list, _M_non_dbg_impl.upper_bound(__x)));
20777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
20877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
20977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
21077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  pair<iterator,iterator> equal_range_unique(const _KT& __x) {
21177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD::pair<_Base_iterator, _Base_iterator> __p;
21277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    __p = _M_non_dbg_impl.equal_range_unique(__x);
21377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return pair<iterator, iterator>(iterator(&_M_iter_list, __p.first), iterator(&_M_iter_list, __p.second));
21477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
21577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  _STLP_TEMPLATE_FOR_CONT_EXT
21677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  pair<const_iterator, const_iterator> equal_range_unique(const _KT& __x) const {
21777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD::pair<_Base_const_iterator, _Base_const_iterator> __p;
21877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    __p = _M_non_dbg_impl.equal_range_unique(__x);
21977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return pair<const_iterator, const_iterator>(const_iterator(&_M_iter_list, __p.first),
22077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner                                                const_iterator(&_M_iter_list, __p.second));
22177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
22277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
22377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  pair<iterator,bool> insert_unique(const value_type& __x) {
22477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_STD::pair<_Base_iterator, bool> __res = _M_non_dbg_impl.insert_unique(__x);
22577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return pair<iterator, bool>(iterator(&_M_iter_list, __res.first), __res.second);
22677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
22777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert_equal(const value_type& __x)
22877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  { return iterator(&_M_iter_list, _M_non_dbg_impl.insert_equal(__x)); }
22977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert_unique(iterator __pos, const value_type& __x) {
23177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_if_owner(&_M_iter_list,__pos))
23277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, _M_non_dbg_impl.insert_unique(__pos._M_iterator, __x));
23377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
23477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  iterator insert_equal(iterator __pos, const value_type& __x) {
23577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_if_owner(&_M_iter_list, __pos))
23677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return iterator(&_M_iter_list, _M_non_dbg_impl.insert_equal(__pos._M_iterator, __x));
23777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
23877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
23977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#if defined (_STLP_MEMBER_TEMPLATES)
24077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template<class _InputIterator>
24177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert_equal(_InputIterator __first, _InputIterator __last) {
24277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_range(__first,__last))
24377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert_equal(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
24477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
24577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  template<class _InputIterator>
24677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert_unique(_InputIterator __first, _InputIterator __last) {
24777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_range(__first,__last))
24877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert_unique(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last));
24977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#else
25177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert_unique(const_iterator __first, const_iterator __last) {
25277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_range(__first,__last))
25377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert_unique(__first._M_iterator, __last._M_iterator);
25477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert_unique(const value_type* __first, const value_type* __last) {
25677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_ptr_range(__first,__last))
25777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert_unique(__first, __last);
25877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
25977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert_equal(const_iterator __first, const_iterator __last) {
26077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_range(__first,__last))
26177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert_equal(__first._M_iterator, __last._M_iterator);
26277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void insert_equal(const value_type* __first, const value_type* __last) {
26477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_ptr_range(__first,__last))
26577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.insert_equal(__first, __last);
26677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
26777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif
26877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
26977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void erase(iterator __pos) {
27077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_if_owner(&_M_iter_list,__pos))
27177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(_Dereferenceable(__pos))
27277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterator(__pos);
27377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.erase(__pos._M_iterator);
27477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
27577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type erase(const key_type& __x) {
27677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    pair<iterator, iterator> __p = equal_range(__x);
27777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    size_type __n = _STLP_STD::distance(__p.first._M_iterator, __p.second._M_iterator);
27877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterators(__p.first, __p.second);
27977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.erase(__p.first._M_iterator, __p.second._M_iterator);
28077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return __n;
28177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
28277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  size_type erase_unique(const key_type& __x) {
28377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Base_iterator __i = _M_non_dbg_impl.find(__x);
28477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    if (__i != _M_non_dbg_impl.end()) {
28577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _Invalidate_iterator(iterator(&_M_iter_list, __i));
28677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      _M_non_dbg_impl.erase(__i);
28777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner      return 1;
28877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    }
28977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    return 0;
29077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
29177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
29277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void erase(iterator __first, iterator __last) {
29377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _STLP_DEBUG_CHECK(__check_range(__first, __last, begin(), end()))
29477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterators(__first, __last);
29577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator);
29677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
29777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void erase(const key_type* __first, const key_type* __last) {
29877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    while (__first != __last) erase(*__first++);
29977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  void clear() {
30277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    //should not invalidate end:
30377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _Invalidate_iterators(begin(), end());
30477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner    _M_non_dbg_impl.clear();
30577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner  }
30677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner};
30777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
30877dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_MOVE_TO_STD_NAMESPACE
30977dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner_STLP_END_NAMESPACE
31077dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31177dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#undef _STLP_NON_DBG_TREE
31277dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31377dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner#endif /* _STLP_INTERNAL_DBG_TREE_H */
31477dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner
31577dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// Local Variables:
31677dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// mode:C++
31777dc872c5c4ae67e051d1bf7edf96ce36c7b9be2David 'Digit' Turner// End:
318