111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* 211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1994 411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Hewlett-Packard Company 511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1996,1997 711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Silicon Graphics Computer Systems, Inc. 811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1997 1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Moscow Center for SPARC Technology 1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (c) 1999 1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Boris Fomitchev 1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * This material is provided "as is", with absolutely no warranty expressed 1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * or implied. Any use is at your own risk. 1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to use or copy this software for any purpose is hereby granted 1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * without fee, provided the above notices are retained on all copies. 2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Permission to modify the code and to distribute modified code is granted, 2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * provided the above notices are retained, and a notice that the code was 2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * modified is included with the above copyright notice. 2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * 2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* NOTE: This is an internal header file, included by other STL headers. 2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You should not attempt to use it directly. 2811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */ 2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_INTERNAL_DBG_DEQUE_H 3111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_INTERNAL_DBG_DEQUE_H 3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef _STLP_DBG_ITERATOR_H 3411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# include <stl/debug/_iterator.h> 3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define _STLP_NON_DBG_DEQUE _STLP_PRIV _STLP_NON_DBG_NAME(deque) <_Tp,_Alloc> 3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_BEGIN_NAMESPACE 4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DEBUG_USE_DISTINCT_VALUE_TYPE_HELPERS) 4211cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, class _Alloc> 4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline _Tp* value_type(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_DEQUE >&) 4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return (_Tp*)0; } 4511cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, class _Alloc> 4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertinline random_access_iterator_tag iterator_category(const _STLP_PRIV _DBG_iter_base< _STLP_NON_DBG_DEQUE >&) 4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ return random_access_iterator_tag(); } 4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 5011cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) > 5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertclass deque : 5211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (__DMC__) 5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert private 5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __construct_checker<_STLP_NON_DBG_DEQUE > 5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) 5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert , public __stlport_class<deque<_Tp, _Alloc> > 5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 5911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert{ 6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef deque<_Tp,_Alloc> _Self; 6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_NON_DBG_DEQUE _Base; 6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV __construct_checker<_STLP_NON_DBG_DEQUE > _ConstructCheck; 6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Basic types 6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __IMPORT_CONTAINER_TYPEDEFS(_Base) 6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Iterators 6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Nonconst_traits<value_type> > > iterator; 7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typedef _STLP_PRIV _DBG_iter<_Base, _STLP_PRIV _DbgTraits<_Const_traits<value_type> > > const_iterator; 7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS; 7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertprotected: 7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Base _M_non_dbg_impl; 7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV __owned_list _M_iter_list; 7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate_all() 7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _M_iter_list._Invalidate_all(); } 8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate_iterator(const iterator& __it) 8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _STLP_PRIV __invalidate_iterator(&_M_iter_list,__it); } 8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _Invalidate_iterators(const iterator& __first, const iterator& __last) 8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert { _STLP_PRIV __invalidate_range(&_M_iter_list, __first, __last); } 8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Basic accessors 8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert allocator_type get_allocator() const { return _M_non_dbg_impl.get_allocator(); } 8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator begin() { return iterator(&_M_iter_list, _M_non_dbg_impl.begin()); } 9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator end() { return iterator(&_M_iter_list, _M_non_dbg_impl.end()); } 9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator begin() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.begin()); } 9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator end() const { return const_iterator(&_M_iter_list, _M_non_dbg_impl.end()); } 9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reverse_iterator rbegin() { return reverse_iterator(end()); } 9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reverse_iterator rend() { return reverse_iterator(begin()); } 9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } 9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } 9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reference operator[](size_type __n) { 10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__n < size(), _StlMsg_OUT_OF_BOUNDS) 10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return _M_non_dbg_impl[__n]; 10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reference operator[](size_type __n) const { 10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(__n < size(), _StlMsg_OUT_OF_BOUNDS) 10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return _M_non_dbg_impl[__n]; 10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reference at(size_type __n) { return _M_non_dbg_impl.at(__n); } 10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reference at(size_type __n) const { return _M_non_dbg_impl.at(__n); } 11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reference front() { 11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *begin(); 11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reference front() const { 11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *begin(); 11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert reference back() { 12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *(--end()); 12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_reference back() const { 12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *(--end()); 12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Constructor, destructor. 12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit deque(const allocator_type& __a = allocator_type()) : 13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__a), _M_iter_list(&_M_non_dbg_impl) {} 13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(const _Self& __x) : 13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _ConstructCheck(__x), _M_non_dbg_impl(__x._M_non_dbg_impl), 13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) {} 13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined(_STLP_DONT_SUP_DFLT_PARAM) 13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit deque(size_type __n, const value_type& __x = _Tp(), 13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(size_type __n, const value_type& __x, 13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) : 14111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__n, __x, __a), _M_iter_list(&_M_non_dbg_impl) {} 14211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DONT_SUP_DFLT_PARAM) 14311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert explicit deque(size_type __n) : 14411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__n), _M_iter_list(&_M_non_dbg_impl) {} 14511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 14611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 14711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_NO_MOVE_SEMANTIC) 14811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(__move_source<_Self> src) 14911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _M_non_dbg_impl(__move_source<_Base>(src.get()._M_non_dbg_impl)), 15011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) { 15111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_NO_EXTENSIONS) || (_STLP_DEBUG_LEVEL == _STLP_STANDARD_DBG_LEVEL) 15211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert src.get()._M_iter_list._Invalidate_all(); 15311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# else 15411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert src.get()._M_iter_list._Set_owner(_M_iter_list); 15511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 15611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 15711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 15811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 15911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 16011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 16111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(_InputIterator __first, _InputIterator __last, 16211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL) 16311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 16411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last), __a), 16511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) { 16611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 16711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 16811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 16911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(_InputIterator __first, _InputIterator __last) 17011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 17111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)), 17211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) { 17311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 17411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert# endif 17511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 17611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(const value_type* __first, const value_type* __last, 17711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 17811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 17911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__first, __last, __a), 18011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) { 18111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 18211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 18311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert deque(const_iterator __first, const_iterator __last, 18411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const allocator_type& __a = allocator_type()) 18511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert : _ConstructCheck(__first, __last), 18611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl(__first._M_iterator, __last._M_iterator, __a), 18711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list(&_M_non_dbg_impl) { 18811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 18911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 19011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Self& operator=(const _Self& __x) { 19211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (this != &__x) { 19311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 19411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl = __x._M_non_dbg_impl; 19511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 19611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return *this; 19711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 19811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 19911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert bool empty() const { return _M_non_dbg_impl.empty(); } 20011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type size() const { return _M_non_dbg_impl.size(); } 20111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert size_type max_size() const { return _M_non_dbg_impl.max_size(); } 20211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 20311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void swap(_Self& __x) { 20411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_iter_list._Swap_owners(__x._M_iter_list); 20511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.swap(__x._M_non_dbg_impl); 20611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 20711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 20811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void _M_swap_workaround(_Self& __x) { swap(__x); } 20911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 21011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: 21211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(size_type __n, const _Tp& __val) { 21311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 21411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__n, __val); 21511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 21611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 21711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 21811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 21911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(_InputIterator __first, _InputIterator __last) { 22011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 22111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 22211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(_STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)); 22311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 22411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 22511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(const_iterator __first, const_iterator __last) { 22611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 22711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 22811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__first._M_iterator, __last._M_iterator); 22911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 23011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void assign(const value_type *__first, const value_type *__last) { 23111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) 23211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 23311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.assign(__first, __last); 23411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 23511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 23611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: // push_* and pop_* 23811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 23911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 24011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_back(const value_type& __t = _Tp()) { 24111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 24211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_back(const value_type& __t) { 24311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 24411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 24511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.push_back(__t); 24611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 24711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 24811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 24911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_back() { 25011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 25111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.push_back(); 25211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 25311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 25411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 25511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 25611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_front(const value_type& __t = _Tp()) { 25711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 25811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_front(const value_type& __t) { 25911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 26011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 26111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.push_front(__t); 26211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 26311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 26411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 26511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void push_front() { 26611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 26711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.push_front(); 26811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 26911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 27011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void pop_back() { 27211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 27311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(end()); 27411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.pop_back(); 27511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 27611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 27711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void pop_front() { 27811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_VERBOSE_ASSERT(!empty(), _StlMsg_EMPTY_CONTAINER) 27911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(begin()); 28011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.pop_front(); 28111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 28211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertpublic: // Insert 28411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 28511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 28611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(iterator __pos, const value_type& __x = _Tp()) { 28711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 28811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(iterator __pos, const value_type& __x) { 28911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 29011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 29111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 29211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator(&_M_iter_list, _M_non_dbg_impl.insert(__pos._M_iterator, __x)); 29311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 29411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 29511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 29611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator insert(iterator __pos) { 29711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 29811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 29911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator(&_M_iter_list, _M_non_dbg_impl.insert(__pos._M_iterator)); 30011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 30211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, size_type __n, const value_type& __x) { 30411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 30511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__n != 0) _Invalidate_all(); 30611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __n, __x); 30711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 30811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 30911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_MEMBER_TEMPLATES) 31011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert template <class _InputIterator> 31111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, _InputIterator __first, _InputIterator __last) { 31211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 31311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // We perform invalidate first to detect self referencing in __check_range as __first and __last 31411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // will have been invalidated. 31511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first != __last) _Invalidate_all(); 31611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 31711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, 31811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_PRIV _Non_Dbg_iter(__first), _STLP_PRIV _Non_Dbg_iter(__last)); 31911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 32011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 32111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 32211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_MEMBER_TEMPLATES) 32311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, 32411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const value_type* __first, const value_type* __last) { 32511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 32611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_ptr_range(__first, __last)) 32711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first != __last) _Invalidate_all(); 32811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __first, __last); 32911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 33011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 33111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 33211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_MEMBER_TEMPLATES) || !defined (_STLP_NO_METHOD_SPECIALIZATION) 33311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, 33411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert const_iterator __first, const_iterator __last) { 33511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 33611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 33711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Sequence requirements 23.1.1 Table 67: 33811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_not_owner(&_M_iter_list, __first)); 33911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first != __last) _Invalidate_all(); 34011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); 34111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 34211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 34311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void insert(iterator __pos, 34411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator __first, iterator __last) { 34511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 34611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last)) 34711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert //Sequence requirements 23.1.1 Table 67: 34811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_not_owner(&_M_iter_list, __first)); 34911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first != __last) _Invalidate_all(); 35011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.insert(__pos._M_iterator, __first._M_iterator, __last._M_iterator); 35111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 35211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 35311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 35411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 35511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void resize(size_type __new_size, const value_type& __x = _Tp()) { 35611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#else 35711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void resize(size_type __new_size, const value_type& __x) { 35811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 35911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__new_size != size()) { 36011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if ((__new_size > size()) || (__new_size < size() - 1)) 36111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 36211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 36311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(end()); 36411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 36511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.resize(__new_size, __x); 36611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 36711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 36811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#if defined (_STLP_DONT_SUP_DFLT_PARAM) 36911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void resize(size_type new_size) { resize(new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 37011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif 37111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 37211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert // Erase 37311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator erase(iterator __pos) { 37411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_if_owner(&_M_iter_list, __pos)) 37511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV _Dereferenceable(__pos)) 37611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__pos._M_iterator == _M_non_dbg_impl.begin()) { 37711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(__pos); 37811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } else { 37911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert typename _Base::iterator tmp = --(_M_non_dbg_impl.end()); 38011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__pos._M_iterator == tmp) 38111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterator(__pos); 38211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 38311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 38411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 38511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__pos._M_iterator)); 38611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 38711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 38811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert iterator erase(iterator __first, iterator __last) { 38911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _STLP_DEBUG_CHECK(_STLP_PRIV __check_range(__first, __last, begin(), end())) 39011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (!empty()) { 39111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert if (__first._M_iterator == _M_non_dbg_impl.begin() || 39211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert __last._M_iterator == _M_non_dbg_impl.end()) 39311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_iterators(__first, __last); 39411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert else 39511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 39611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 39711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert return iterator (&_M_iter_list, _M_non_dbg_impl.erase(__first._M_iterator, __last._M_iterator)); 39811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 39911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert void clear() { 40111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _Invalidate_all(); 40211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert _M_non_dbg_impl.clear(); 40311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert } 40411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert}; 40511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert_STLP_END_NAMESPACE 40711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 40811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#undef _STLP_NON_DBG_DEQUE 40911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif /* _STLP_INTERNAL_DEQUE_H */ 41111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert 41211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// Local Variables: 41311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// mode:C++ 41411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert// End: 415