19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996,1997 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_DEQUE_C 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_DEQUE_C 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_DEQUE_H 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_deque.h> 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Non-inline member functions from _Deque_base. 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_Deque_base<_Tp,_Alloc >::~_Deque_base() { 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (_M_map._M_data) { 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_destroy_nodes(_M_start._M_node, this->_M_finish._M_node + 1); 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_map.deallocate(_M_map._M_data, _M_map_size._M_data); 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Deque_base<_Tp,_Alloc>::_M_initialize_map(size_t __num_elements) { 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_t __num_nodes = __num_elements / this->buffer_size() + 1 ; 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_map_size._M_data = (max)((size_t) _S_initial_map_size, __num_nodes + 2); 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_map._M_data = _M_map.allocate(_M_map_size._M_data); 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp** __nstart = _M_map._M_data + (_M_map_size._M_data - __num_nodes) / 2; 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp** __nfinish = __nstart + __num_nodes; 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_create_nodes(__nstart, __nfinish); 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND((_M_map.deallocate(_M_map._M_data, _M_map_size._M_data), 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_map._M_data = 0, _M_map_size._M_data = 0)) 629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_start._M_set_node(__nstart); 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_set_node(__nfinish - 1); 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_start._M_cur = _M_start._M_first; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_cur = this->_M_finish._M_first + __num_elements % this->buffer_size(); 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Deque_base<_Tp,_Alloc>::_M_create_nodes(_Tp** __nstart, 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp** __nfinish) { 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp** __cur = __nstart; 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __cur < __nfinish; ++__cur) 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__cur = _M_map_size.allocate(this->buffer_size()); 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_M_destroy_nodes(__nstart, __cur)) 779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid _Deque_base<_Tp,_Alloc>::_M_destroy_nodes(_Tp** __nstart, 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Tp** __nfinish) { 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (_Tp** __n = __nstart; __n < __nfinish; ++__n) 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_map_size.deallocate(*__n, this->buffer_size()); 849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS) 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define deque _STLP_PTR_IMPL_NAME(deque) 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif defined (_STLP_DEBUG) 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define deque _STLP_NON_DBG_NAME(deque) 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_NESTED_TYPE_PARAM_BUG) 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// qualified references 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __iterator__ _Deque_iterator<_Tp, _Nonconst_traits<_Tp> > 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define const_iterator _Deque_iterator<_Tp, _Const_traits<_Tp> > 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define iterator __iterator__ 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define size_type size_t 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define value_type _Tp 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define __iterator__ _STLP_TYPENAME_ON_RETURN_TYPE deque<_Tp, _Alloc>::iterator 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdeque<_Tp, _Alloc >& 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockdeque<_Tp, _Alloc >::operator= (const deque<_Tp, _Alloc >& __x) { 1089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const size_type __len = size(); 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (&__x != this) { 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__len >= __x.size()) 111e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott erase(_STLP_STD::copy(__x.begin(), __x.end(), this->_M_start), this->_M_finish); 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __mid = __x.begin() + difference_type(__len); 114e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__x.begin(), __mid, this->_M_start); 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(this->_M_finish, __mid, __x.end()); 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return *this; 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp, _Alloc >::_M_fill_insert(iterator __pos, 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const value_type& __x) { 124e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 125e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 126e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__pos._M_cur == this->_M_start._M_cur) { 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(__new_start, this->_M_start, __x); 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (__pos._M_cur == this->_M_finish._M_cur) { 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(this->_M_finish, __new_finish, __x); 1399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node+1, __new_finish._M_node+1)) 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_fill_insert_aux(__pos, __n, __x, _Movable()); 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_MEMBER_TEMPLATES) 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp, _Alloc>::insert(iterator __pos, 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type* __first, const value_type* __last) { 152e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 153e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 154e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n = __last - __first; 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__pos._M_cur == this->_M_start._M_cur) { 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 1589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, __new_start); 1609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 1629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 1639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (__pos._M_cur == this->_M_finish._M_cur) { 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, this->_M_finish); 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_finish._M_node + 1)) 1719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 1729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 1749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_range_aux(__pos, __first, __last, __n, _Movable()); 1759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 1769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 1789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::insert(iterator __pos, 1799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last) { 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 181e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 182e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n = __last - __first; 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__pos._M_cur == this->_M_start._M_cur) { 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, __new_start); 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (__pos._M_cur == this->_M_finish._M_cur) { 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, this->_M_finish); 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_finish._M_node + 1)) 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_range_aux(__pos, __first, __last, __n, _Movable()); 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator__ deque<_Tp,_Alloc>::_M_erase(iterator __pos, 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_Movable*/) { 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type __index = __pos - this->_M_start; 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (size_type(__index) < this->size() >> 1) { 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //We move the start of the deque one position to the right 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //starting from the rightmost element to move. 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = __pos, __dst = __pos; 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(&(*__dst)); 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__src != this->_M_start) { 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (--__src; __dst != this->_M_start; --__src, --__dst) { 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_pop_front_aux(); 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = __pos, __dst = __pos; 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(&(*__dst)); 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (++__src; __src != this->_M_finish; ++__src, ++__dst) { 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Duplication of the pop_back code without the destroy which has already been done: 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_M_finish._M_cur != this->_M_finish._M_first) { 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block --this->_M_finish._M_cur; 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_pop_back_aux(); 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->_M_start + __index; 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator__ deque<_Tp,_Alloc>::_M_erase(iterator __pos, 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_Movable*/) { 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __next = __pos; 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__next; 2479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type __index = __pos - this->_M_start; 2489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (size_type(__index) < this->size() >> 1) { 2499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block copy_backward(this->_M_start, __pos, __next); 2509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pop_front(); 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 253e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__next, this->_M_finish, __pos); 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pop_back(); 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->_M_start + __index; 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator__ deque<_Tp,_Alloc>::_M_erase(iterator __first, iterator __last, 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_Movable*/) { 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type __n = __last - __first; 2639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type __elems_before = __first - this->_M_start; 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(this->size() - __n) / 2) { 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = __first, __dst = __last; 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__src != this->_M_start) { 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (--__src, --__dst; (__src >= this->_M_start) && (__dst >= __first); --__src, --__dst) { 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(&(*__dst)); 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__dst >= __first) { 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //There are more elements to erase than elements to move 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__first, ++__dst); 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(this->_M_start, __first); 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //There are more elements to move than elements to erase 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src >= this->_M_start; --__src, --__dst) { 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__dst)); 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(this->_M_start, ++__dst); 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(this->_M_start, __last); 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = this->_M_start + __n; 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_destroy_nodes(this->_M_start._M_node, __new_start._M_node); 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__last != this->_M_finish) { 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = __last, __dst = __first; 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; (__src != this->_M_finish) && (__dst != __last); ++__src, ++__dst) { 2969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(&(*__dst)); 2979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 2989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__dst != __last) { 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //There are more elements to erase than elements to move 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__dst, __last); 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(__last, this->_M_finish); 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //There are more elements to move than elements to erase 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src != this->_M_finish; ++__src, ++__dst) { 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__dst)); 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(__dst, this->_M_finish); 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__first, this->_M_finish); 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = this->_M_finish - __n; 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_destroy_nodes(__new_finish._M_node + 1, this->_M_finish._M_node + 1); 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->_M_start + __elems_before; 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator__ deque<_Tp,_Alloc>::_M_erase(iterator __first, iterator __last, 3259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_Movable*/) { 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type __n = __last - __first; 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type __elems_before = __first - this->_M_start; 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(this->size() - __n) / 2) { 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block copy_backward(this->_M_start, __first, __last); 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = this->_M_start + __n; 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(this->_M_start, __new_start); 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_destroy_nodes(this->_M_start._M_node, __new_start._M_node); 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 336e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__last, this->_M_finish, __first); 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = this->_M_finish - __n; 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__new_finish, this->_M_finish); 3399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_destroy_nodes(__new_finish._M_node + 1, this->_M_finish._M_node + 1); 3409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 3419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return this->_M_start + __elems_before; 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::clear() { 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (_Map_pointer __node = this->_M_start._M_node + 1; 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __node < this->_M_finish._M_node; 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__node) { 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(*__node, *__node + this->buffer_size()); 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(*__node, this->buffer_size()); 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_M_start._M_node != this->_M_finish._M_node) { 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(this->_M_start._M_cur, this->_M_start._M_last); 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(this->_M_finish._M_first, this->_M_finish._M_cur); 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(this->_M_finish._M_first, this->buffer_size()); 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(this->_M_start._M_cur, this->_M_finish._M_cur); 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = this->_M_start; 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Precondition: this->_M_start and this->_M_finish have already been initialized, 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// but none of the deque's elements have yet been constructed. 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_fill_initialize(const value_type& __val, 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_TrivialInit*/) { 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Map_pointer __cur = this->_M_start._M_node; 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __cur < this->_M_finish._M_node; ++__cur) 3739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(*__cur, *__cur + this->buffer_size(), __val); 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(this->_M_finish._M_first, this->_M_finish._M_cur, __val); 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(_STLP_STD::_Destroy_Range(this->_M_start, iterator(*__cur, __cur))) 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Called only if this->_M_finish._M_cur == this->_M_finish._M_last - 1. 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_push_back_aux_v(const value_type& __t) { 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_reserve_map_at_back(); 3849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *(this->_M_finish._M_node + 1) = this->_M_map_size.allocate(this->buffer_size()); 3859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 3869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Copy_Construct(this->_M_finish._M_cur, __t); 3879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_set_node(this->_M_finish._M_node + 1); 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_cur = this->_M_finish._M_first; 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_map_size.deallocate(*(this->_M_finish._M_node + 1), 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->buffer_size())) 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Called only if this->_M_finish._M_cur == this->_M_finish._M_last - 1. 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_push_back_aux() { 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_reserve_map_at_back(); 3999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *(this->_M_finish._M_node + 1) = this->_M_map_size.allocate(this->buffer_size()); 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Construct(this->_M_finish._M_cur); 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_set_node(this->_M_finish._M_node + 1); 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_cur = this->_M_finish._M_first; 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_map_size.deallocate(*(this->_M_finish._M_node + 1), 4069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->buffer_size())) 4079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Called only if this->_M_start._M_cur == this->_M_start._M_first. 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_push_front_aux_v(const value_type& __t) { 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_reserve_map_at_front(); 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *(this->_M_start._M_node - 1) = this->_M_map_size.allocate(this->buffer_size()); 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_set_node(this->_M_start._M_node - 1); 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_cur = this->_M_start._M_last - 1; 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Copy_Construct(this->_M_start._M_cur, __t); 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND((++this->_M_start, 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(*(this->_M_start._M_node - 1), this->buffer_size()))) 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 4269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Called only if this->_M_start._M_cur == this->_M_start._M_first. 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 4289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_push_front_aux() { 4299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_reserve_map_at_front(); 4309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *(this->_M_start._M_node - 1) = this->_M_map_size.allocate(this->buffer_size()); 4319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_set_node(this->_M_start._M_node - 1); 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_cur = this->_M_start._M_last - 1; 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Construct(this->_M_start._M_cur); 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND((++this->_M_start, this->_M_map_size.deallocate(*(this->_M_start._M_node - 1), 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->buffer_size()))) 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/ 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Called only if this->_M_finish._M_cur == this->_M_finish._M_first. 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_pop_back_aux() { 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(this->_M_finish._M_first, this->buffer_size()); 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_set_node(this->_M_finish._M_node - 1); 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_cur = this->_M_finish._M_last - 1; 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Note that if the deque has at least one element (a precondition for this member 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// function), and if this->_M_start._M_cur == this->_M_start._M_last, then the deque 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// must have at least two nodes. 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 4539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_pop_front_aux() { 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_M_start._M_cur != this->_M_start._M_last - 1) 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++this->_M_start._M_cur; 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(this->_M_start._M_first, this->buffer_size()); 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_set_node(this->_M_start._M_node + 1); 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_cur = this->_M_start._M_first; 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator__ deque<_Tp,_Alloc>::_M_fill_insert_aux(iterator __pos, size_type __n, 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type& __x, 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_Movable*/) { 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_before = __pos - this->_M_start; 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __length = this->size(); 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __x_copy = __x; 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(__length / 2)) { 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 4729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_start + __elems_before; 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __new_start; 4759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_start; 4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src != __pos; ++__dst, ++__src) { 4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(__dst, __src, __x_copy); 4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = __dst; 4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 4879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_after = difference_type(__length) - __elems_before; 4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_finish - __elems_after; 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __new_finish; 4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_finish; 4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (--__src, --__dst; __src >= __pos; --__src, --__dst) { 4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_fill(__pos, __pos + __n, __x_copy); 4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1)) 5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __pos; 5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block__iterator__ deque<_Tp,_Alloc>::_M_fill_insert_aux(iterator __pos, size_type __n, 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type& __x, 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_Movable*/) { 5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_before = __pos - this->_M_start; 5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __length = this->size(); 5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __x_copy = __x; 5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(__length / 2)) { 5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __old_start = this->_M_start; 5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_start + __elems_before; 5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before >= difference_type(__n)) { 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __start_n = this->_M_start + difference_type(__n); 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(this->_M_start, __start_n, __new_start); 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 521e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__start_n, __pos, __old_start); 522e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::fill(__pos - difference_type(__n), __pos, __x_copy); 5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos -= difference_type(__n); 5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __uninitialized_copy_fill(this->_M_start, __pos, __new_start, 5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start, __x_copy); 5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fill(__old_start, __pos, __x_copy); 5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 5359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __old_finish = this->_M_finish; 5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_after = 5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type(__length) - __elems_before; 5399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_finish - __elems_after; 5409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 5419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_after > difference_type(__n)) { 5429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __finish_n = this->_M_finish - difference_type(__n); 5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__finish_n, this->_M_finish, this->_M_finish); 5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block copy_backward(__pos, __finish_n, __old_finish); 5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fill(__pos, __pos + difference_type(__n), __x_copy); 5479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __uninitialized_fill_copy(this->_M_finish, __pos + difference_type(__n), 5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __x_copy, __pos, this->_M_finish); 5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block fill(__pos, __old_finish, __x_copy); 5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1)) 5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __pos; 5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_MEMBER_TEMPLATES) 5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_insert_range_aux(iterator __pos, 5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type* __first, const value_type* __last, 5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const __true_type& /*_Movable*/) { 5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_before = __pos - this->_M_start; 5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __length = size(); 5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(__length / 2)) { 5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_start + __elems_before; 5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __new_start; 5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_start; 5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src != __pos; ++__dst, ++__src) { 5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, __dst); 5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 5819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 5839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_after = difference_type(__length) - __elems_before; 5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_finish - __elems_after; 5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __new_finish; 5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_finish; 5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (--__src, --__dst; __src >= __pos; --__src, --__dst) { 5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, __pos); 5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1)) 5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_insert_range_aux(iterator __pos, 6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type* __first, const value_type* __last, 6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const __false_type& /*_Movable*/) { 6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_before = __pos - this->_M_start; 6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __length = size(); 6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(__length / 2)) { 6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __old_start = this->_M_start; 6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_start + __elems_before; 6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before >= difference_type(__n)) { 6129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __start_n = this->_M_start + difference_type(__n); 6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(this->_M_start, __start_n, __new_start); 6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 615e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__start_n, __pos, __old_start); 616e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __last, __pos - difference_type(__n)); 6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type* __mid = __first + (difference_type(__n) - __elems_before); 620e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __uninitialized_copy_copy(this->_M_start, __pos, __first, __mid, __new_start); 6219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 622e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__mid, __last, __old_start); 6239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 6299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __old_finish = this->_M_finish; 6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_after = 6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block difference_type(__length) - __elems_before; 6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_finish - __elems_after; 6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_after > difference_type(__n)) { 6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __finish_n = this->_M_finish - difference_type(__n); 6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__finish_n, this->_M_finish, this->_M_finish); 6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 639e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy_backward(__pos, __finish_n, __old_finish); 640e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __last, __pos); 6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const value_type* __mid = __first + __elems_after; 644e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __uninitialized_copy_copy(__mid, __last, __pos, this->_M_finish, this->_M_finish); 6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 646e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __mid, __pos); 6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1)) 6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_insert_range_aux(iterator __pos, 6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last, 6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const __true_type& /*_Movable*/) { 6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_before = __pos - this->_M_start; 6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __length = size(); 6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before <= difference_type(__length / 2)) { 6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_start + __elems_before; 6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __new_start; 6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_start; 6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src != __pos; ++__dst, ++__src) { 6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, __dst); 6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_after = difference_type(__length) - __elems_before; 6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_finish - __elems_after; 6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __new_finish; 6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_finish; 6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (--__src, --__dst; __src >= __pos; --__src, --__dst) { 6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(&(*__dst), *__src); 6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(&(*__src)); 6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__first, __last, __pos); 6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1)) 6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_insert_range_aux(iterator __pos, 6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last, 6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const __false_type& /*_Movable*/) { 6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_before = __pos - this->_M_start; 6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __length = size(); 6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before < difference_type(__length / 2)) { 6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_start = _M_reserve_elements_at_front(__n); 7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __old_start = this->_M_start; 7019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_start + __elems_before; 7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_before >= difference_type(__n)) { 7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __start_n = this->_M_start + __n; 7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(this->_M_start, __start_n, __new_start); 7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 707e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__start_n, __pos, __old_start); 708e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __last, __pos - difference_type(__n)); 7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __mid = __first + (__n - __elems_before); 712e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __uninitialized_copy_copy(this->_M_start, __pos, __first, __mid, __new_start); 7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __new_start; 714e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__mid, __last, __old_start); 7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node)) 7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = _M_reserve_elements_at_back(__n); 7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __old_finish = this->_M_finish; 7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const difference_type __elems_after = __length - __elems_before; 7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = this->_M_finish - __elems_after; 7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_after > difference_type(__n)) { 7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __finish_n = this->_M_finish - difference_type(__n); 7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy(__finish_n, this->_M_finish, this->_M_finish); 7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 729e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy_backward(__pos, __finish_n, __old_finish); 730e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __last, __pos); 7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __mid = __first + __elems_after; 734e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_PRIV __uninitialized_copy_copy(__mid, __last, __pos, this->_M_finish, this->_M_finish); 7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 736e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __mid, __pos); 7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1)) 7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_new_elements_at_front(size_type __new_elems) { 7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __new_nodes 7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block = (__new_elems + this->buffer_size() - 1) / this->buffer_size(); 7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_reserve_map_at_front(__new_nodes); 7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __i = 1; 7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 7519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __i <= __new_nodes; ++__i) 7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *(this->_M_start._M_node - __i) = this->_M_map_size.allocate(this->buffer_size()); 7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(for (size_type __j = 1; __j < __i; ++__j) 7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(*(this->_M_start._M_node - __j), this->buffer_size())) 7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 7579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_new_elements_at_back(size_type __new_elems) { 7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __new_nodes 7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block = (__new_elems + this->buffer_size() - 1) / this->buffer_size(); 7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_reserve_map_at_back(__new_nodes); 7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __i = 1; 7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __i <= __new_nodes; ++__i) 7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *(this->_M_finish._M_node + __i) = this->_M_map_size.allocate(this->buffer_size()); 7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(for (size_type __j = 1; __j < __i; ++__j) 7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size.deallocate(*(this->_M_finish._M_node + __j), this->buffer_size())) 7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc > 7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockvoid deque<_Tp,_Alloc>::_M_reallocate_map(size_type __nodes_to_add, 7749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool __add_at_front) { 7759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __old_num_nodes = this->_M_finish._M_node - this->_M_start._M_node + 1; 7769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __new_num_nodes = __old_num_nodes + __nodes_to_add; 7779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Map_pointer __new_nstart; 7799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_M_map_size._M_data > 2 * __new_num_nodes) { 7809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_nstart = this->_M_map._M_data + (this->_M_map_size._M_data - __new_num_nodes) / 2 7819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block + (__add_at_front ? __nodes_to_add : 0); 7829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__new_nstart < this->_M_start._M_node) 783e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(this->_M_start._M_node, this->_M_finish._M_node + 1, __new_nstart); 7849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 785e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy_backward(this->_M_start._M_node, this->_M_finish._M_node + 1, 786e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __new_nstart + __old_num_nodes); 7879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 7899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __new_map_size = 7909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size._M_data + (max)((size_t)this->_M_map_size._M_data, __nodes_to_add) + 2; 7919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Map_pointer __new_map = this->_M_map.allocate(__new_map_size); 7939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2 794e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott + (__add_at_front ? __nodes_to_add : 0); 795e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(this->_M_start._M_node, this->_M_finish._M_node + 1, __new_nstart); 7969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map.deallocate(this->_M_map._M_data, this->_M_map_size._M_data); 7979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map._M_data = __new_map; 7999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_map_size._M_data = __new_map_size; 8009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 8019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start._M_set_node(__new_nstart); 8039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish._M_set_node(__new_nstart + __old_num_nodes - 1); 8049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block} 8059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (deque) 8079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef deque 8089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 8099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 8109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 8129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef __iterator__ 8149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef iterator 8159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef const_iterator 8169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef size_type 8179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef value_type 8189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_DEQUE_C */ 8209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 8219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 8229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 8239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 824