1*58b9f456SAndroid Build Coastguard Worker// -*- C++ -*- 2*58b9f456SAndroid Build Coastguard Worker//===---------------------------- deque -----------------------------------===// 3*58b9f456SAndroid Build Coastguard Worker// 4*58b9f456SAndroid Build Coastguard Worker// The LLVM Compiler Infrastructure 5*58b9f456SAndroid Build Coastguard Worker// 6*58b9f456SAndroid Build Coastguard Worker// This file is dual licensed under the MIT and the University of Illinois Open 7*58b9f456SAndroid Build Coastguard Worker// Source Licenses. See LICENSE.TXT for details. 8*58b9f456SAndroid Build Coastguard Worker// 9*58b9f456SAndroid Build Coastguard Worker//===----------------------------------------------------------------------===// 10*58b9f456SAndroid Build Coastguard Worker 11*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_DEQUE 12*58b9f456SAndroid Build Coastguard Worker#define _LIBCPP_DEQUE 13*58b9f456SAndroid Build Coastguard Worker 14*58b9f456SAndroid Build Coastguard Worker/* 15*58b9f456SAndroid Build Coastguard Worker deque synopsis 16*58b9f456SAndroid Build Coastguard Worker 17*58b9f456SAndroid Build Coastguard Workernamespace std 18*58b9f456SAndroid Build Coastguard Worker{ 19*58b9f456SAndroid Build Coastguard Worker 20*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator = allocator<T> > 21*58b9f456SAndroid Build Coastguard Workerclass deque 22*58b9f456SAndroid Build Coastguard Worker{ 23*58b9f456SAndroid Build Coastguard Workerpublic: 24*58b9f456SAndroid Build Coastguard Worker // types: 25*58b9f456SAndroid Build Coastguard Worker typedef T value_type; 26*58b9f456SAndroid Build Coastguard Worker typedef Allocator allocator_type; 27*58b9f456SAndroid Build Coastguard Worker 28*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_type::reference reference; 29*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_type::const_reference const_reference; 30*58b9f456SAndroid Build Coastguard Worker typedef implementation-defined iterator; 31*58b9f456SAndroid Build Coastguard Worker typedef implementation-defined const_iterator; 32*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_type::size_type size_type; 33*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_type::difference_type difference_type; 34*58b9f456SAndroid Build Coastguard Worker 35*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_type::pointer pointer; 36*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_type::const_pointer const_pointer; 37*58b9f456SAndroid Build Coastguard Worker typedef std::reverse_iterator<iterator> reverse_iterator; 38*58b9f456SAndroid Build Coastguard Worker typedef std::reverse_iterator<const_iterator> const_reverse_iterator; 39*58b9f456SAndroid Build Coastguard Worker 40*58b9f456SAndroid Build Coastguard Worker // construct/copy/destroy: 41*58b9f456SAndroid Build Coastguard Worker deque() noexcept(is_nothrow_default_constructible<allocator_type>::value); 42*58b9f456SAndroid Build Coastguard Worker explicit deque(const allocator_type& a); 43*58b9f456SAndroid Build Coastguard Worker explicit deque(size_type n); 44*58b9f456SAndroid Build Coastguard Worker explicit deque(size_type n, const allocator_type& a); // C++14 45*58b9f456SAndroid Build Coastguard Worker deque(size_type n, const value_type& v); 46*58b9f456SAndroid Build Coastguard Worker deque(size_type n, const value_type& v, const allocator_type& a); 47*58b9f456SAndroid Build Coastguard Worker template <class InputIterator> 48*58b9f456SAndroid Build Coastguard Worker deque(InputIterator f, InputIterator l); 49*58b9f456SAndroid Build Coastguard Worker template <class InputIterator> 50*58b9f456SAndroid Build Coastguard Worker deque(InputIterator f, InputIterator l, const allocator_type& a); 51*58b9f456SAndroid Build Coastguard Worker deque(const deque& c); 52*58b9f456SAndroid Build Coastguard Worker deque(deque&& c) 53*58b9f456SAndroid Build Coastguard Worker noexcept(is_nothrow_move_constructible<allocator_type>::value); 54*58b9f456SAndroid Build Coastguard Worker deque(initializer_list<value_type> il, const Allocator& a = allocator_type()); 55*58b9f456SAndroid Build Coastguard Worker deque(const deque& c, const allocator_type& a); 56*58b9f456SAndroid Build Coastguard Worker deque(deque&& c, const allocator_type& a); 57*58b9f456SAndroid Build Coastguard Worker ~deque(); 58*58b9f456SAndroid Build Coastguard Worker 59*58b9f456SAndroid Build Coastguard Worker deque& operator=(const deque& c); 60*58b9f456SAndroid Build Coastguard Worker deque& operator=(deque&& c) 61*58b9f456SAndroid Build Coastguard Worker noexcept( 62*58b9f456SAndroid Build Coastguard Worker allocator_type::propagate_on_container_move_assignment::value && 63*58b9f456SAndroid Build Coastguard Worker is_nothrow_move_assignable<allocator_type>::value); 64*58b9f456SAndroid Build Coastguard Worker deque& operator=(initializer_list<value_type> il); 65*58b9f456SAndroid Build Coastguard Worker 66*58b9f456SAndroid Build Coastguard Worker template <class InputIterator> 67*58b9f456SAndroid Build Coastguard Worker void assign(InputIterator f, InputIterator l); 68*58b9f456SAndroid Build Coastguard Worker void assign(size_type n, const value_type& v); 69*58b9f456SAndroid Build Coastguard Worker void assign(initializer_list<value_type> il); 70*58b9f456SAndroid Build Coastguard Worker 71*58b9f456SAndroid Build Coastguard Worker allocator_type get_allocator() const noexcept; 72*58b9f456SAndroid Build Coastguard Worker 73*58b9f456SAndroid Build Coastguard Worker // iterators: 74*58b9f456SAndroid Build Coastguard Worker 75*58b9f456SAndroid Build Coastguard Worker iterator begin() noexcept; 76*58b9f456SAndroid Build Coastguard Worker const_iterator begin() const noexcept; 77*58b9f456SAndroid Build Coastguard Worker iterator end() noexcept; 78*58b9f456SAndroid Build Coastguard Worker const_iterator end() const noexcept; 79*58b9f456SAndroid Build Coastguard Worker 80*58b9f456SAndroid Build Coastguard Worker reverse_iterator rbegin() noexcept; 81*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator rbegin() const noexcept; 82*58b9f456SAndroid Build Coastguard Worker reverse_iterator rend() noexcept; 83*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator rend() const noexcept; 84*58b9f456SAndroid Build Coastguard Worker 85*58b9f456SAndroid Build Coastguard Worker const_iterator cbegin() const noexcept; 86*58b9f456SAndroid Build Coastguard Worker const_iterator cend() const noexcept; 87*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator crbegin() const noexcept; 88*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator crend() const noexcept; 89*58b9f456SAndroid Build Coastguard Worker 90*58b9f456SAndroid Build Coastguard Worker // capacity: 91*58b9f456SAndroid Build Coastguard Worker size_type size() const noexcept; 92*58b9f456SAndroid Build Coastguard Worker size_type max_size() const noexcept; 93*58b9f456SAndroid Build Coastguard Worker void resize(size_type n); 94*58b9f456SAndroid Build Coastguard Worker void resize(size_type n, const value_type& v); 95*58b9f456SAndroid Build Coastguard Worker void shrink_to_fit(); 96*58b9f456SAndroid Build Coastguard Worker bool empty() const noexcept; 97*58b9f456SAndroid Build Coastguard Worker 98*58b9f456SAndroid Build Coastguard Worker // element access: 99*58b9f456SAndroid Build Coastguard Worker reference operator[](size_type i); 100*58b9f456SAndroid Build Coastguard Worker const_reference operator[](size_type i) const; 101*58b9f456SAndroid Build Coastguard Worker reference at(size_type i); 102*58b9f456SAndroid Build Coastguard Worker const_reference at(size_type i) const; 103*58b9f456SAndroid Build Coastguard Worker reference front(); 104*58b9f456SAndroid Build Coastguard Worker const_reference front() const; 105*58b9f456SAndroid Build Coastguard Worker reference back(); 106*58b9f456SAndroid Build Coastguard Worker const_reference back() const; 107*58b9f456SAndroid Build Coastguard Worker 108*58b9f456SAndroid Build Coastguard Worker // modifiers: 109*58b9f456SAndroid Build Coastguard Worker void push_front(const value_type& v); 110*58b9f456SAndroid Build Coastguard Worker void push_front(value_type&& v); 111*58b9f456SAndroid Build Coastguard Worker void push_back(const value_type& v); 112*58b9f456SAndroid Build Coastguard Worker void push_back(value_type&& v); 113*58b9f456SAndroid Build Coastguard Worker template <class... Args> reference emplace_front(Args&&... args); // reference in C++17 114*58b9f456SAndroid Build Coastguard Worker template <class... Args> reference emplace_back(Args&&... args); // reference in C++17 115*58b9f456SAndroid Build Coastguard Worker template <class... Args> iterator emplace(const_iterator p, Args&&... args); 116*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator p, const value_type& v); 117*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator p, value_type&& v); 118*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator p, size_type n, const value_type& v); 119*58b9f456SAndroid Build Coastguard Worker template <class InputIterator> 120*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator p, InputIterator f, InputIterator l); 121*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator p, initializer_list<value_type> il); 122*58b9f456SAndroid Build Coastguard Worker void pop_front(); 123*58b9f456SAndroid Build Coastguard Worker void pop_back(); 124*58b9f456SAndroid Build Coastguard Worker iterator erase(const_iterator p); 125*58b9f456SAndroid Build Coastguard Worker iterator erase(const_iterator f, const_iterator l); 126*58b9f456SAndroid Build Coastguard Worker void swap(deque& c) 127*58b9f456SAndroid Build Coastguard Worker noexcept(allocator_traits<allocator_type>::is_always_equal::value); // C++17 128*58b9f456SAndroid Build Coastguard Worker void clear() noexcept; 129*58b9f456SAndroid Build Coastguard Worker}; 130*58b9f456SAndroid Build Coastguard Worker 131*58b9f456SAndroid Build Coastguard Workertemplate <class InputIterator, class Allocator = allocator<typename iterator_traits<InputIterator>::value_type>> 132*58b9f456SAndroid Build Coastguard Worker deque(InputIterator, InputIterator, Allocator = Allocator()) 133*58b9f456SAndroid Build Coastguard Worker -> deque<typename iterator_traits<InputIterator>::value_type, Allocator>; 134*58b9f456SAndroid Build Coastguard Worker 135*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 136*58b9f456SAndroid Build Coastguard Worker bool operator==(const deque<T,Allocator>& x, const deque<T,Allocator>& y); 137*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 138*58b9f456SAndroid Build Coastguard Worker bool operator< (const deque<T,Allocator>& x, const deque<T,Allocator>& y); 139*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 140*58b9f456SAndroid Build Coastguard Worker bool operator!=(const deque<T,Allocator>& x, const deque<T,Allocator>& y); 141*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 142*58b9f456SAndroid Build Coastguard Worker bool operator> (const deque<T,Allocator>& x, const deque<T,Allocator>& y); 143*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 144*58b9f456SAndroid Build Coastguard Worker bool operator>=(const deque<T,Allocator>& x, const deque<T,Allocator>& y); 145*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 146*58b9f456SAndroid Build Coastguard Worker bool operator<=(const deque<T,Allocator>& x, const deque<T,Allocator>& y); 147*58b9f456SAndroid Build Coastguard Worker 148*58b9f456SAndroid Build Coastguard Worker// specialized algorithms: 149*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator> 150*58b9f456SAndroid Build Coastguard Worker void swap(deque<T,Allocator>& x, deque<T,Allocator>& y) 151*58b9f456SAndroid Build Coastguard Worker noexcept(noexcept(x.swap(y))); 152*58b9f456SAndroid Build Coastguard Worker 153*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator, class U> 154*58b9f456SAndroid Build Coastguard Worker void erase(deque<T, Allocator>& c, const U& value); // C++20 155*58b9f456SAndroid Build Coastguard Workertemplate <class T, class Allocator, class Predicate> 156*58b9f456SAndroid Build Coastguard Worker void erase_if(deque<T, Allocator>& c, Predicate pred); // C++20 157*58b9f456SAndroid Build Coastguard Worker 158*58b9f456SAndroid Build Coastguard Worker} // std 159*58b9f456SAndroid Build Coastguard Worker 160*58b9f456SAndroid Build Coastguard Worker*/ 161*58b9f456SAndroid Build Coastguard Worker 162*58b9f456SAndroid Build Coastguard Worker#include <__config> 163*58b9f456SAndroid Build Coastguard Worker#include <__split_buffer> 164*58b9f456SAndroid Build Coastguard Worker#include <type_traits> 165*58b9f456SAndroid Build Coastguard Worker#include <initializer_list> 166*58b9f456SAndroid Build Coastguard Worker#include <iterator> 167*58b9f456SAndroid Build Coastguard Worker#include <algorithm> 168*58b9f456SAndroid Build Coastguard Worker#include <stdexcept> 169*58b9f456SAndroid Build Coastguard Worker#include <version> 170*58b9f456SAndroid Build Coastguard Worker 171*58b9f456SAndroid Build Coastguard Worker#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) 172*58b9f456SAndroid Build Coastguard Worker#pragma GCC system_header 173*58b9f456SAndroid Build Coastguard Worker#endif 174*58b9f456SAndroid Build Coastguard Worker 175*58b9f456SAndroid Build Coastguard Worker_LIBCPP_PUSH_MACROS 176*58b9f456SAndroid Build Coastguard Worker#include <__undef_macros> 177*58b9f456SAndroid Build Coastguard Worker 178*58b9f456SAndroid Build Coastguard Worker 179*58b9f456SAndroid Build Coastguard Worker_LIBCPP_BEGIN_NAMESPACE_STD 180*58b9f456SAndroid Build Coastguard Worker 181*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> class __deque_base; 182*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator = allocator<_Tp> > class _LIBCPP_TEMPLATE_VIS deque; 183*58b9f456SAndroid Build Coastguard Worker 184*58b9f456SAndroid Build Coastguard Workertemplate <class _ValueType, class _Pointer, class _Reference, class _MapPointer, 185*58b9f456SAndroid Build Coastguard Worker class _DiffType, _DiffType _BlockSize> 186*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS __deque_iterator; 187*58b9f456SAndroid Build Coastguard Worker 188*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 189*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 190*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 191*58b9f456SAndroid Build Coastguard Workercopy(_RAIter __f, 192*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 193*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 194*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0); 195*58b9f456SAndroid Build Coastguard Worker 196*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 197*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 198*58b9f456SAndroid Build Coastguard Worker_OutputIterator 199*58b9f456SAndroid Build Coastguard Workercopy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 200*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 201*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 202*58b9f456SAndroid Build Coastguard Worker 203*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 204*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 205*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 206*58b9f456SAndroid Build Coastguard Workercopy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 207*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 208*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 209*58b9f456SAndroid Build Coastguard Worker 210*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 211*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 212*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 213*58b9f456SAndroid Build Coastguard Workercopy_backward(_RAIter __f, 214*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 215*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 216*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0); 217*58b9f456SAndroid Build Coastguard Worker 218*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 219*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 220*58b9f456SAndroid Build Coastguard Worker_OutputIterator 221*58b9f456SAndroid Build Coastguard Workercopy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 222*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 223*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 224*58b9f456SAndroid Build Coastguard Worker 225*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 226*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 227*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 228*58b9f456SAndroid Build Coastguard Workercopy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 229*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 230*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 231*58b9f456SAndroid Build Coastguard Worker 232*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 233*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 234*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 235*58b9f456SAndroid Build Coastguard Workermove(_RAIter __f, 236*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 237*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 238*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0); 239*58b9f456SAndroid Build Coastguard Worker 240*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 241*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 242*58b9f456SAndroid Build Coastguard Worker_OutputIterator 243*58b9f456SAndroid Build Coastguard Workermove(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 244*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 245*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 246*58b9f456SAndroid Build Coastguard Worker 247*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 248*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 249*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 250*58b9f456SAndroid Build Coastguard Workermove(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 251*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 252*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 253*58b9f456SAndroid Build Coastguard Worker 254*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 255*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 256*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 257*58b9f456SAndroid Build Coastguard Workermove_backward(_RAIter __f, 258*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 259*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 260*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0); 261*58b9f456SAndroid Build Coastguard Worker 262*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 263*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 264*58b9f456SAndroid Build Coastguard Worker_OutputIterator 265*58b9f456SAndroid Build Coastguard Workermove_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 266*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 267*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 268*58b9f456SAndroid Build Coastguard Worker 269*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 270*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 271*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 272*58b9f456SAndroid Build Coastguard Workermove_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 273*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 274*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 275*58b9f456SAndroid Build Coastguard Worker 276*58b9f456SAndroid Build Coastguard Workertemplate <class _ValueType, class _DiffType> 277*58b9f456SAndroid Build Coastguard Workerstruct __deque_block_size { 278*58b9f456SAndroid Build Coastguard Worker static const _DiffType value = sizeof(_ValueType) < 256 ? 4096 / sizeof(_ValueType) : 16; 279*58b9f456SAndroid Build Coastguard Worker}; 280*58b9f456SAndroid Build Coastguard Worker 281*58b9f456SAndroid Build Coastguard Workertemplate <class _ValueType, class _Pointer, class _Reference, class _MapPointer, 282*58b9f456SAndroid Build Coastguard Worker class _DiffType, _DiffType _BS = 283*58b9f456SAndroid Build Coastguard Worker#ifdef _LIBCPP_ABI_INCOMPLETE_TYPES_IN_DEQUE 284*58b9f456SAndroid Build Coastguard Worker// Keep template parameter to avoid changing all template declarations thoughout 285*58b9f456SAndroid Build Coastguard Worker// this file. 286*58b9f456SAndroid Build Coastguard Worker 0 287*58b9f456SAndroid Build Coastguard Worker#else 288*58b9f456SAndroid Build Coastguard Worker __deque_block_size<_ValueType, _DiffType>::value 289*58b9f456SAndroid Build Coastguard Worker#endif 290*58b9f456SAndroid Build Coastguard Worker > 291*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS __deque_iterator 292*58b9f456SAndroid Build Coastguard Worker{ 293*58b9f456SAndroid Build Coastguard Worker typedef _MapPointer __map_iterator; 294*58b9f456SAndroid Build Coastguard Workerpublic: 295*58b9f456SAndroid Build Coastguard Worker typedef _Pointer pointer; 296*58b9f456SAndroid Build Coastguard Worker typedef _DiffType difference_type; 297*58b9f456SAndroid Build Coastguard Workerprivate: 298*58b9f456SAndroid Build Coastguard Worker __map_iterator __m_iter_; 299*58b9f456SAndroid Build Coastguard Worker pointer __ptr_; 300*58b9f456SAndroid Build Coastguard Worker 301*58b9f456SAndroid Build Coastguard Worker static const difference_type __block_size; 302*58b9f456SAndroid Build Coastguard Workerpublic: 303*58b9f456SAndroid Build Coastguard Worker typedef _ValueType value_type; 304*58b9f456SAndroid Build Coastguard Worker typedef random_access_iterator_tag iterator_category; 305*58b9f456SAndroid Build Coastguard Worker typedef _Reference reference; 306*58b9f456SAndroid Build Coastguard Worker 307*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator() _NOEXCEPT 308*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 309*58b9f456SAndroid Build Coastguard Worker : __m_iter_(nullptr), __ptr_(nullptr) 310*58b9f456SAndroid Build Coastguard Worker#endif 311*58b9f456SAndroid Build Coastguard Worker {} 312*58b9f456SAndroid Build Coastguard Worker 313*58b9f456SAndroid Build Coastguard Worker template <class _Pp, class _Rp, class _MP> 314*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 315*58b9f456SAndroid Build Coastguard Worker __deque_iterator(const __deque_iterator<value_type, _Pp, _Rp, _MP, difference_type, _BS>& __it, 316*58b9f456SAndroid Build Coastguard Worker typename enable_if<is_convertible<_Pp, pointer>::value>::type* = 0) _NOEXCEPT 317*58b9f456SAndroid Build Coastguard Worker : __m_iter_(__it.__m_iter_), __ptr_(__it.__ptr_) {} 318*58b9f456SAndroid Build Coastguard Worker 319*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY reference operator*() const {return *__ptr_;} 320*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY pointer operator->() const {return __ptr_;} 321*58b9f456SAndroid Build Coastguard Worker 322*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator++() 323*58b9f456SAndroid Build Coastguard Worker { 324*58b9f456SAndroid Build Coastguard Worker if (++__ptr_ - *__m_iter_ == __block_size) 325*58b9f456SAndroid Build Coastguard Worker { 326*58b9f456SAndroid Build Coastguard Worker ++__m_iter_; 327*58b9f456SAndroid Build Coastguard Worker __ptr_ = *__m_iter_; 328*58b9f456SAndroid Build Coastguard Worker } 329*58b9f456SAndroid Build Coastguard Worker return *this; 330*58b9f456SAndroid Build Coastguard Worker } 331*58b9f456SAndroid Build Coastguard Worker 332*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator operator++(int) 333*58b9f456SAndroid Build Coastguard Worker { 334*58b9f456SAndroid Build Coastguard Worker __deque_iterator __tmp = *this; 335*58b9f456SAndroid Build Coastguard Worker ++(*this); 336*58b9f456SAndroid Build Coastguard Worker return __tmp; 337*58b9f456SAndroid Build Coastguard Worker } 338*58b9f456SAndroid Build Coastguard Worker 339*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator--() 340*58b9f456SAndroid Build Coastguard Worker { 341*58b9f456SAndroid Build Coastguard Worker if (__ptr_ == *__m_iter_) 342*58b9f456SAndroid Build Coastguard Worker { 343*58b9f456SAndroid Build Coastguard Worker --__m_iter_; 344*58b9f456SAndroid Build Coastguard Worker __ptr_ = *__m_iter_ + __block_size; 345*58b9f456SAndroid Build Coastguard Worker } 346*58b9f456SAndroid Build Coastguard Worker --__ptr_; 347*58b9f456SAndroid Build Coastguard Worker return *this; 348*58b9f456SAndroid Build Coastguard Worker } 349*58b9f456SAndroid Build Coastguard Worker 350*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator operator--(int) 351*58b9f456SAndroid Build Coastguard Worker { 352*58b9f456SAndroid Build Coastguard Worker __deque_iterator __tmp = *this; 353*58b9f456SAndroid Build Coastguard Worker --(*this); 354*58b9f456SAndroid Build Coastguard Worker return __tmp; 355*58b9f456SAndroid Build Coastguard Worker } 356*58b9f456SAndroid Build Coastguard Worker 357*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator+=(difference_type __n) 358*58b9f456SAndroid Build Coastguard Worker { 359*58b9f456SAndroid Build Coastguard Worker if (__n != 0) 360*58b9f456SAndroid Build Coastguard Worker { 361*58b9f456SAndroid Build Coastguard Worker __n += __ptr_ - *__m_iter_; 362*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 363*58b9f456SAndroid Build Coastguard Worker { 364*58b9f456SAndroid Build Coastguard Worker __m_iter_ += __n / __block_size; 365*58b9f456SAndroid Build Coastguard Worker __ptr_ = *__m_iter_ + __n % __block_size; 366*58b9f456SAndroid Build Coastguard Worker } 367*58b9f456SAndroid Build Coastguard Worker else // (__n < 0) 368*58b9f456SAndroid Build Coastguard Worker { 369*58b9f456SAndroid Build Coastguard Worker difference_type __z = __block_size - 1 - __n; 370*58b9f456SAndroid Build Coastguard Worker __m_iter_ -= __z / __block_size; 371*58b9f456SAndroid Build Coastguard Worker __ptr_ = *__m_iter_ + (__block_size - 1 - __z % __block_size); 372*58b9f456SAndroid Build Coastguard Worker } 373*58b9f456SAndroid Build Coastguard Worker } 374*58b9f456SAndroid Build Coastguard Worker return *this; 375*58b9f456SAndroid Build Coastguard Worker } 376*58b9f456SAndroid Build Coastguard Worker 377*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator& operator-=(difference_type __n) 378*58b9f456SAndroid Build Coastguard Worker { 379*58b9f456SAndroid Build Coastguard Worker return *this += -__n; 380*58b9f456SAndroid Build Coastguard Worker } 381*58b9f456SAndroid Build Coastguard Worker 382*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator operator+(difference_type __n) const 383*58b9f456SAndroid Build Coastguard Worker { 384*58b9f456SAndroid Build Coastguard Worker __deque_iterator __t(*this); 385*58b9f456SAndroid Build Coastguard Worker __t += __n; 386*58b9f456SAndroid Build Coastguard Worker return __t; 387*58b9f456SAndroid Build Coastguard Worker } 388*58b9f456SAndroid Build Coastguard Worker 389*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator operator-(difference_type __n) const 390*58b9f456SAndroid Build Coastguard Worker { 391*58b9f456SAndroid Build Coastguard Worker __deque_iterator __t(*this); 392*58b9f456SAndroid Build Coastguard Worker __t -= __n; 393*58b9f456SAndroid Build Coastguard Worker return __t; 394*58b9f456SAndroid Build Coastguard Worker } 395*58b9f456SAndroid Build Coastguard Worker 396*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 397*58b9f456SAndroid Build Coastguard Worker friend __deque_iterator operator+(difference_type __n, const __deque_iterator& __it) 398*58b9f456SAndroid Build Coastguard Worker {return __it + __n;} 399*58b9f456SAndroid Build Coastguard Worker 400*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 401*58b9f456SAndroid Build Coastguard Worker friend difference_type operator-(const __deque_iterator& __x, const __deque_iterator& __y) 402*58b9f456SAndroid Build Coastguard Worker { 403*58b9f456SAndroid Build Coastguard Worker if (__x != __y) 404*58b9f456SAndroid Build Coastguard Worker return (__x.__m_iter_ - __y.__m_iter_) * __block_size 405*58b9f456SAndroid Build Coastguard Worker + (__x.__ptr_ - *__x.__m_iter_) 406*58b9f456SAndroid Build Coastguard Worker - (__y.__ptr_ - *__y.__m_iter_); 407*58b9f456SAndroid Build Coastguard Worker return 0; 408*58b9f456SAndroid Build Coastguard Worker } 409*58b9f456SAndroid Build Coastguard Worker 410*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY reference operator[](difference_type __n) const 411*58b9f456SAndroid Build Coastguard Worker {return *(*this + __n);} 412*58b9f456SAndroid Build Coastguard Worker 413*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY friend 414*58b9f456SAndroid Build Coastguard Worker bool operator==(const __deque_iterator& __x, const __deque_iterator& __y) 415*58b9f456SAndroid Build Coastguard Worker {return __x.__ptr_ == __y.__ptr_;} 416*58b9f456SAndroid Build Coastguard Worker 417*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY friend 418*58b9f456SAndroid Build Coastguard Worker bool operator!=(const __deque_iterator& __x, const __deque_iterator& __y) 419*58b9f456SAndroid Build Coastguard Worker {return !(__x == __y);} 420*58b9f456SAndroid Build Coastguard Worker 421*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY friend 422*58b9f456SAndroid Build Coastguard Worker bool operator<(const __deque_iterator& __x, const __deque_iterator& __y) 423*58b9f456SAndroid Build Coastguard Worker {return __x.__m_iter_ < __y.__m_iter_ || 424*58b9f456SAndroid Build Coastguard Worker (__x.__m_iter_ == __y.__m_iter_ && __x.__ptr_ < __y.__ptr_);} 425*58b9f456SAndroid Build Coastguard Worker 426*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY friend 427*58b9f456SAndroid Build Coastguard Worker bool operator>(const __deque_iterator& __x, const __deque_iterator& __y) 428*58b9f456SAndroid Build Coastguard Worker {return __y < __x;} 429*58b9f456SAndroid Build Coastguard Worker 430*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY friend 431*58b9f456SAndroid Build Coastguard Worker bool operator<=(const __deque_iterator& __x, const __deque_iterator& __y) 432*58b9f456SAndroid Build Coastguard Worker {return !(__y < __x);} 433*58b9f456SAndroid Build Coastguard Worker 434*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY friend 435*58b9f456SAndroid Build Coastguard Worker bool operator>=(const __deque_iterator& __x, const __deque_iterator& __y) 436*58b9f456SAndroid Build Coastguard Worker {return !(__x < __y);} 437*58b9f456SAndroid Build Coastguard Worker 438*58b9f456SAndroid Build Coastguard Workerprivate: 439*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY __deque_iterator(__map_iterator __m, pointer __p) _NOEXCEPT 440*58b9f456SAndroid Build Coastguard Worker : __m_iter_(__m), __ptr_(__p) {} 441*58b9f456SAndroid Build Coastguard Worker 442*58b9f456SAndroid Build Coastguard Worker template <class _Tp, class _Ap> friend class __deque_base; 443*58b9f456SAndroid Build Coastguard Worker template <class _Tp, class _Ap> friend class _LIBCPP_TEMPLATE_VIS deque; 444*58b9f456SAndroid Build Coastguard Worker template <class _Vp, class _Pp, class _Rp, class _MP, class _Dp, _Dp> 445*58b9f456SAndroid Build Coastguard Worker friend class _LIBCPP_TEMPLATE_VIS __deque_iterator; 446*58b9f456SAndroid Build Coastguard Worker 447*58b9f456SAndroid Build Coastguard Worker template <class _RAIter, 448*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 449*58b9f456SAndroid Build Coastguard Worker friend 450*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 451*58b9f456SAndroid Build Coastguard Worker copy(_RAIter __f, 452*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 453*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 454*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*); 455*58b9f456SAndroid Build Coastguard Worker 456*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 457*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 458*58b9f456SAndroid Build Coastguard Worker friend 459*58b9f456SAndroid Build Coastguard Worker _OutputIterator 460*58b9f456SAndroid Build Coastguard Worker copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 461*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 462*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 463*58b9f456SAndroid Build Coastguard Worker 464*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 465*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 466*58b9f456SAndroid Build Coastguard Worker friend 467*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 468*58b9f456SAndroid Build Coastguard Worker copy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 469*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 470*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 471*58b9f456SAndroid Build Coastguard Worker 472*58b9f456SAndroid Build Coastguard Worker template <class _RAIter, 473*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 474*58b9f456SAndroid Build Coastguard Worker friend 475*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 476*58b9f456SAndroid Build Coastguard Worker copy_backward(_RAIter __f, 477*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 478*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 479*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*); 480*58b9f456SAndroid Build Coastguard Worker 481*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 482*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 483*58b9f456SAndroid Build Coastguard Worker friend 484*58b9f456SAndroid Build Coastguard Worker _OutputIterator 485*58b9f456SAndroid Build Coastguard Worker copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 486*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 487*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 488*58b9f456SAndroid Build Coastguard Worker 489*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 490*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 491*58b9f456SAndroid Build Coastguard Worker friend 492*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 493*58b9f456SAndroid Build Coastguard Worker copy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 494*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 495*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 496*58b9f456SAndroid Build Coastguard Worker 497*58b9f456SAndroid Build Coastguard Worker template <class _RAIter, 498*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 499*58b9f456SAndroid Build Coastguard Worker friend 500*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 501*58b9f456SAndroid Build Coastguard Worker move(_RAIter __f, 502*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 503*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 504*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*); 505*58b9f456SAndroid Build Coastguard Worker 506*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 507*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 508*58b9f456SAndroid Build Coastguard Worker friend 509*58b9f456SAndroid Build Coastguard Worker _OutputIterator 510*58b9f456SAndroid Build Coastguard Worker move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 511*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 512*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 513*58b9f456SAndroid Build Coastguard Worker 514*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 515*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 516*58b9f456SAndroid Build Coastguard Worker friend 517*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 518*58b9f456SAndroid Build Coastguard Worker move(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 519*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 520*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 521*58b9f456SAndroid Build Coastguard Worker 522*58b9f456SAndroid Build Coastguard Worker template <class _RAIter, 523*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 524*58b9f456SAndroid Build Coastguard Worker friend 525*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 526*58b9f456SAndroid Build Coastguard Worker move_backward(_RAIter __f, 527*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 528*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 529*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*); 530*58b9f456SAndroid Build Coastguard Worker 531*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 532*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 533*58b9f456SAndroid Build Coastguard Worker friend 534*58b9f456SAndroid Build Coastguard Worker _OutputIterator 535*58b9f456SAndroid Build Coastguard Worker move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 536*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 537*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r); 538*58b9f456SAndroid Build Coastguard Worker 539*58b9f456SAndroid Build Coastguard Worker template <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 540*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 541*58b9f456SAndroid Build Coastguard Worker friend 542*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 543*58b9f456SAndroid Build Coastguard Worker move_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 544*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 545*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r); 546*58b9f456SAndroid Build Coastguard Worker}; 547*58b9f456SAndroid Build Coastguard Worker 548*58b9f456SAndroid Build Coastguard Workertemplate <class _ValueType, class _Pointer, class _Reference, class _MapPointer, 549*58b9f456SAndroid Build Coastguard Worker class _DiffType, _DiffType _BlockSize> 550*58b9f456SAndroid Build Coastguard Workerconst _DiffType __deque_iterator<_ValueType, _Pointer, _Reference, _MapPointer, 551*58b9f456SAndroid Build Coastguard Worker _DiffType, _BlockSize>::__block_size = 552*58b9f456SAndroid Build Coastguard Worker __deque_block_size<_ValueType, _DiffType>::value; 553*58b9f456SAndroid Build Coastguard Worker 554*58b9f456SAndroid Build Coastguard Worker// copy 555*58b9f456SAndroid Build Coastguard Worker 556*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 557*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 558*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 559*58b9f456SAndroid Build Coastguard Workercopy(_RAIter __f, 560*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 561*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 562*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*) 563*58b9f456SAndroid Build Coastguard Worker{ 564*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type; 565*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer; 566*58b9f456SAndroid Build Coastguard Worker const difference_type __block_size = __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::__block_size; 567*58b9f456SAndroid Build Coastguard Worker while (__f != __l) 568*58b9f456SAndroid Build Coastguard Worker { 569*58b9f456SAndroid Build Coastguard Worker pointer __rb = __r.__ptr_; 570*58b9f456SAndroid Build Coastguard Worker pointer __re = *__r.__m_iter_ + __block_size; 571*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __re - __rb; 572*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 573*58b9f456SAndroid Build Coastguard Worker _RAIter __m = __l; 574*58b9f456SAndroid Build Coastguard Worker if (__n > __bs) 575*58b9f456SAndroid Build Coastguard Worker { 576*58b9f456SAndroid Build Coastguard Worker __n = __bs; 577*58b9f456SAndroid Build Coastguard Worker __m = __f + __n; 578*58b9f456SAndroid Build Coastguard Worker } 579*58b9f456SAndroid Build Coastguard Worker _VSTD::copy(__f, __m, __rb); 580*58b9f456SAndroid Build Coastguard Worker __f = __m; 581*58b9f456SAndroid Build Coastguard Worker __r += __n; 582*58b9f456SAndroid Build Coastguard Worker } 583*58b9f456SAndroid Build Coastguard Worker return __r; 584*58b9f456SAndroid Build Coastguard Worker} 585*58b9f456SAndroid Build Coastguard Worker 586*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 587*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 588*58b9f456SAndroid Build Coastguard Worker_OutputIterator 589*58b9f456SAndroid Build Coastguard Workercopy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 590*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 591*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r) 592*58b9f456SAndroid Build Coastguard Worker{ 593*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 594*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 595*58b9f456SAndroid Build Coastguard Worker const difference_type __block_size = __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::__block_size; 596*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 597*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 598*58b9f456SAndroid Build Coastguard Worker { 599*58b9f456SAndroid Build Coastguard Worker pointer __fb = __f.__ptr_; 600*58b9f456SAndroid Build Coastguard Worker pointer __fe = *__f.__m_iter_ + __block_size; 601*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __fe - __fb; 602*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 603*58b9f456SAndroid Build Coastguard Worker { 604*58b9f456SAndroid Build Coastguard Worker __bs = __n; 605*58b9f456SAndroid Build Coastguard Worker __fe = __fb + __bs; 606*58b9f456SAndroid Build Coastguard Worker } 607*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::copy(__fb, __fe, __r); 608*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 609*58b9f456SAndroid Build Coastguard Worker __f += __bs; 610*58b9f456SAndroid Build Coastguard Worker } 611*58b9f456SAndroid Build Coastguard Worker return __r; 612*58b9f456SAndroid Build Coastguard Worker} 613*58b9f456SAndroid Build Coastguard Worker 614*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 615*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 616*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 617*58b9f456SAndroid Build Coastguard Workercopy(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 618*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 619*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r) 620*58b9f456SAndroid Build Coastguard Worker{ 621*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 622*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 623*58b9f456SAndroid Build Coastguard Worker const difference_type __block_size = __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::__block_size; 624*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 625*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 626*58b9f456SAndroid Build Coastguard Worker { 627*58b9f456SAndroid Build Coastguard Worker pointer __fb = __f.__ptr_; 628*58b9f456SAndroid Build Coastguard Worker pointer __fe = *__f.__m_iter_ + __block_size; 629*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __fe - __fb; 630*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 631*58b9f456SAndroid Build Coastguard Worker { 632*58b9f456SAndroid Build Coastguard Worker __bs = __n; 633*58b9f456SAndroid Build Coastguard Worker __fe = __fb + __bs; 634*58b9f456SAndroid Build Coastguard Worker } 635*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::copy(__fb, __fe, __r); 636*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 637*58b9f456SAndroid Build Coastguard Worker __f += __bs; 638*58b9f456SAndroid Build Coastguard Worker } 639*58b9f456SAndroid Build Coastguard Worker return __r; 640*58b9f456SAndroid Build Coastguard Worker} 641*58b9f456SAndroid Build Coastguard Worker 642*58b9f456SAndroid Build Coastguard Worker// copy_backward 643*58b9f456SAndroid Build Coastguard Worker 644*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 645*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 646*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 647*58b9f456SAndroid Build Coastguard Workercopy_backward(_RAIter __f, 648*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 649*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 650*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*) 651*58b9f456SAndroid Build Coastguard Worker{ 652*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type; 653*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer; 654*58b9f456SAndroid Build Coastguard Worker while (__f != __l) 655*58b9f456SAndroid Build Coastguard Worker { 656*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __rp = _VSTD::prev(__r); 657*58b9f456SAndroid Build Coastguard Worker pointer __rb = *__rp.__m_iter_; 658*58b9f456SAndroid Build Coastguard Worker pointer __re = __rp.__ptr_ + 1; 659*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __re - __rb; 660*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 661*58b9f456SAndroid Build Coastguard Worker _RAIter __m = __f; 662*58b9f456SAndroid Build Coastguard Worker if (__n > __bs) 663*58b9f456SAndroid Build Coastguard Worker { 664*58b9f456SAndroid Build Coastguard Worker __n = __bs; 665*58b9f456SAndroid Build Coastguard Worker __m = __l - __n; 666*58b9f456SAndroid Build Coastguard Worker } 667*58b9f456SAndroid Build Coastguard Worker _VSTD::copy_backward(__m, __l, __re); 668*58b9f456SAndroid Build Coastguard Worker __l = __m; 669*58b9f456SAndroid Build Coastguard Worker __r -= __n; 670*58b9f456SAndroid Build Coastguard Worker } 671*58b9f456SAndroid Build Coastguard Worker return __r; 672*58b9f456SAndroid Build Coastguard Worker} 673*58b9f456SAndroid Build Coastguard Worker 674*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 675*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 676*58b9f456SAndroid Build Coastguard Worker_OutputIterator 677*58b9f456SAndroid Build Coastguard Workercopy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 678*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 679*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r) 680*58b9f456SAndroid Build Coastguard Worker{ 681*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 682*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 683*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 684*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 685*58b9f456SAndroid Build Coastguard Worker { 686*58b9f456SAndroid Build Coastguard Worker --__l; 687*58b9f456SAndroid Build Coastguard Worker pointer __lb = *__l.__m_iter_; 688*58b9f456SAndroid Build Coastguard Worker pointer __le = __l.__ptr_ + 1; 689*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __le - __lb; 690*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 691*58b9f456SAndroid Build Coastguard Worker { 692*58b9f456SAndroid Build Coastguard Worker __bs = __n; 693*58b9f456SAndroid Build Coastguard Worker __lb = __le - __bs; 694*58b9f456SAndroid Build Coastguard Worker } 695*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::copy_backward(__lb, __le, __r); 696*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 697*58b9f456SAndroid Build Coastguard Worker __l -= __bs - 1; 698*58b9f456SAndroid Build Coastguard Worker } 699*58b9f456SAndroid Build Coastguard Worker return __r; 700*58b9f456SAndroid Build Coastguard Worker} 701*58b9f456SAndroid Build Coastguard Worker 702*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 703*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 704*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 705*58b9f456SAndroid Build Coastguard Workercopy_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 706*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 707*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r) 708*58b9f456SAndroid Build Coastguard Worker{ 709*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 710*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 711*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 712*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 713*58b9f456SAndroid Build Coastguard Worker { 714*58b9f456SAndroid Build Coastguard Worker --__l; 715*58b9f456SAndroid Build Coastguard Worker pointer __lb = *__l.__m_iter_; 716*58b9f456SAndroid Build Coastguard Worker pointer __le = __l.__ptr_ + 1; 717*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __le - __lb; 718*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 719*58b9f456SAndroid Build Coastguard Worker { 720*58b9f456SAndroid Build Coastguard Worker __bs = __n; 721*58b9f456SAndroid Build Coastguard Worker __lb = __le - __bs; 722*58b9f456SAndroid Build Coastguard Worker } 723*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::copy_backward(__lb, __le, __r); 724*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 725*58b9f456SAndroid Build Coastguard Worker __l -= __bs - 1; 726*58b9f456SAndroid Build Coastguard Worker } 727*58b9f456SAndroid Build Coastguard Worker return __r; 728*58b9f456SAndroid Build Coastguard Worker} 729*58b9f456SAndroid Build Coastguard Worker 730*58b9f456SAndroid Build Coastguard Worker// move 731*58b9f456SAndroid Build Coastguard Worker 732*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 733*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 734*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 735*58b9f456SAndroid Build Coastguard Workermove(_RAIter __f, 736*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 737*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 738*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*) 739*58b9f456SAndroid Build Coastguard Worker{ 740*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type; 741*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer; 742*58b9f456SAndroid Build Coastguard Worker const difference_type __block_size = __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::__block_size; 743*58b9f456SAndroid Build Coastguard Worker while (__f != __l) 744*58b9f456SAndroid Build Coastguard Worker { 745*58b9f456SAndroid Build Coastguard Worker pointer __rb = __r.__ptr_; 746*58b9f456SAndroid Build Coastguard Worker pointer __re = *__r.__m_iter_ + __block_size; 747*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __re - __rb; 748*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 749*58b9f456SAndroid Build Coastguard Worker _RAIter __m = __l; 750*58b9f456SAndroid Build Coastguard Worker if (__n > __bs) 751*58b9f456SAndroid Build Coastguard Worker { 752*58b9f456SAndroid Build Coastguard Worker __n = __bs; 753*58b9f456SAndroid Build Coastguard Worker __m = __f + __n; 754*58b9f456SAndroid Build Coastguard Worker } 755*58b9f456SAndroid Build Coastguard Worker _VSTD::move(__f, __m, __rb); 756*58b9f456SAndroid Build Coastguard Worker __f = __m; 757*58b9f456SAndroid Build Coastguard Worker __r += __n; 758*58b9f456SAndroid Build Coastguard Worker } 759*58b9f456SAndroid Build Coastguard Worker return __r; 760*58b9f456SAndroid Build Coastguard Worker} 761*58b9f456SAndroid Build Coastguard Worker 762*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 763*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 764*58b9f456SAndroid Build Coastguard Worker_OutputIterator 765*58b9f456SAndroid Build Coastguard Workermove(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 766*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 767*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r) 768*58b9f456SAndroid Build Coastguard Worker{ 769*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 770*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 771*58b9f456SAndroid Build Coastguard Worker const difference_type __block_size = __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::__block_size; 772*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 773*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 774*58b9f456SAndroid Build Coastguard Worker { 775*58b9f456SAndroid Build Coastguard Worker pointer __fb = __f.__ptr_; 776*58b9f456SAndroid Build Coastguard Worker pointer __fe = *__f.__m_iter_ + __block_size; 777*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __fe - __fb; 778*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 779*58b9f456SAndroid Build Coastguard Worker { 780*58b9f456SAndroid Build Coastguard Worker __bs = __n; 781*58b9f456SAndroid Build Coastguard Worker __fe = __fb + __bs; 782*58b9f456SAndroid Build Coastguard Worker } 783*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::move(__fb, __fe, __r); 784*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 785*58b9f456SAndroid Build Coastguard Worker __f += __bs; 786*58b9f456SAndroid Build Coastguard Worker } 787*58b9f456SAndroid Build Coastguard Worker return __r; 788*58b9f456SAndroid Build Coastguard Worker} 789*58b9f456SAndroid Build Coastguard Worker 790*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 791*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 792*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 793*58b9f456SAndroid Build Coastguard Workermove(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 794*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 795*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r) 796*58b9f456SAndroid Build Coastguard Worker{ 797*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 798*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 799*58b9f456SAndroid Build Coastguard Worker const difference_type __block_size = __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::__block_size; 800*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 801*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 802*58b9f456SAndroid Build Coastguard Worker { 803*58b9f456SAndroid Build Coastguard Worker pointer __fb = __f.__ptr_; 804*58b9f456SAndroid Build Coastguard Worker pointer __fe = *__f.__m_iter_ + __block_size; 805*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __fe - __fb; 806*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 807*58b9f456SAndroid Build Coastguard Worker { 808*58b9f456SAndroid Build Coastguard Worker __bs = __n; 809*58b9f456SAndroid Build Coastguard Worker __fe = __fb + __bs; 810*58b9f456SAndroid Build Coastguard Worker } 811*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::move(__fb, __fe, __r); 812*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 813*58b9f456SAndroid Build Coastguard Worker __f += __bs; 814*58b9f456SAndroid Build Coastguard Worker } 815*58b9f456SAndroid Build Coastguard Worker return __r; 816*58b9f456SAndroid Build Coastguard Worker} 817*58b9f456SAndroid Build Coastguard Worker 818*58b9f456SAndroid Build Coastguard Worker// move_backward 819*58b9f456SAndroid Build Coastguard Worker 820*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter, 821*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 822*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 823*58b9f456SAndroid Build Coastguard Workermove_backward(_RAIter __f, 824*58b9f456SAndroid Build Coastguard Worker _RAIter __l, 825*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r, 826*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*) 827*58b9f456SAndroid Build Coastguard Worker{ 828*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::difference_type difference_type; 829*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2>::pointer pointer; 830*58b9f456SAndroid Build Coastguard Worker while (__f != __l) 831*58b9f456SAndroid Build Coastguard Worker { 832*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __rp = _VSTD::prev(__r); 833*58b9f456SAndroid Build Coastguard Worker pointer __rb = *__rp.__m_iter_; 834*58b9f456SAndroid Build Coastguard Worker pointer __re = __rp.__ptr_ + 1; 835*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __re - __rb; 836*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 837*58b9f456SAndroid Build Coastguard Worker _RAIter __m = __f; 838*58b9f456SAndroid Build Coastguard Worker if (__n > __bs) 839*58b9f456SAndroid Build Coastguard Worker { 840*58b9f456SAndroid Build Coastguard Worker __n = __bs; 841*58b9f456SAndroid Build Coastguard Worker __m = __l - __n; 842*58b9f456SAndroid Build Coastguard Worker } 843*58b9f456SAndroid Build Coastguard Worker _VSTD::move_backward(__m, __l, __re); 844*58b9f456SAndroid Build Coastguard Worker __l = __m; 845*58b9f456SAndroid Build Coastguard Worker __r -= __n; 846*58b9f456SAndroid Build Coastguard Worker } 847*58b9f456SAndroid Build Coastguard Worker return __r; 848*58b9f456SAndroid Build Coastguard Worker} 849*58b9f456SAndroid Build Coastguard Worker 850*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 851*58b9f456SAndroid Build Coastguard Worker class _OutputIterator> 852*58b9f456SAndroid Build Coastguard Worker_OutputIterator 853*58b9f456SAndroid Build Coastguard Workermove_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 854*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 855*58b9f456SAndroid Build Coastguard Worker _OutputIterator __r) 856*58b9f456SAndroid Build Coastguard Worker{ 857*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 858*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 859*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 860*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 861*58b9f456SAndroid Build Coastguard Worker { 862*58b9f456SAndroid Build Coastguard Worker --__l; 863*58b9f456SAndroid Build Coastguard Worker pointer __lb = *__l.__m_iter_; 864*58b9f456SAndroid Build Coastguard Worker pointer __le = __l.__ptr_ + 1; 865*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __le - __lb; 866*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 867*58b9f456SAndroid Build Coastguard Worker { 868*58b9f456SAndroid Build Coastguard Worker __bs = __n; 869*58b9f456SAndroid Build Coastguard Worker __lb = __le - __bs; 870*58b9f456SAndroid Build Coastguard Worker } 871*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::move_backward(__lb, __le, __r); 872*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 873*58b9f456SAndroid Build Coastguard Worker __l -= __bs - 1; 874*58b9f456SAndroid Build Coastguard Worker } 875*58b9f456SAndroid Build Coastguard Worker return __r; 876*58b9f456SAndroid Build Coastguard Worker} 877*58b9f456SAndroid Build Coastguard Worker 878*58b9f456SAndroid Build Coastguard Workertemplate <class _V1, class _P1, class _R1, class _M1, class _D1, _D1 _B1, 879*58b9f456SAndroid Build Coastguard Worker class _V2, class _P2, class _R2, class _M2, class _D2, _D2 _B2> 880*58b9f456SAndroid Build Coastguard Worker__deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> 881*58b9f456SAndroid Build Coastguard Workermove_backward(__deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __f, 882*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1> __l, 883*58b9f456SAndroid Build Coastguard Worker __deque_iterator<_V2, _P2, _R2, _M2, _D2, _B2> __r) 884*58b9f456SAndroid Build Coastguard Worker{ 885*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::difference_type difference_type; 886*58b9f456SAndroid Build Coastguard Worker typedef typename __deque_iterator<_V1, _P1, _R1, _M1, _D1, _B1>::pointer pointer; 887*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 888*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 889*58b9f456SAndroid Build Coastguard Worker { 890*58b9f456SAndroid Build Coastguard Worker --__l; 891*58b9f456SAndroid Build Coastguard Worker pointer __lb = *__l.__m_iter_; 892*58b9f456SAndroid Build Coastguard Worker pointer __le = __l.__ptr_ + 1; 893*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __le - __lb; 894*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 895*58b9f456SAndroid Build Coastguard Worker { 896*58b9f456SAndroid Build Coastguard Worker __bs = __n; 897*58b9f456SAndroid Build Coastguard Worker __lb = __le - __bs; 898*58b9f456SAndroid Build Coastguard Worker } 899*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::move_backward(__lb, __le, __r); 900*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 901*58b9f456SAndroid Build Coastguard Worker __l -= __bs - 1; 902*58b9f456SAndroid Build Coastguard Worker } 903*58b9f456SAndroid Build Coastguard Worker return __r; 904*58b9f456SAndroid Build Coastguard Worker} 905*58b9f456SAndroid Build Coastguard Worker 906*58b9f456SAndroid Build Coastguard Workertemplate <bool> 907*58b9f456SAndroid Build Coastguard Workerclass __deque_base_common 908*58b9f456SAndroid Build Coastguard Worker{ 909*58b9f456SAndroid Build Coastguard Workerprotected: 910*58b9f456SAndroid Build Coastguard Worker _LIBCPP_NORETURN void __throw_length_error() const; 911*58b9f456SAndroid Build Coastguard Worker _LIBCPP_NORETURN void __throw_out_of_range() const; 912*58b9f456SAndroid Build Coastguard Worker}; 913*58b9f456SAndroid Build Coastguard Worker 914*58b9f456SAndroid Build Coastguard Workertemplate <bool __b> 915*58b9f456SAndroid Build Coastguard Workervoid 916*58b9f456SAndroid Build Coastguard Worker__deque_base_common<__b>::__throw_length_error() const 917*58b9f456SAndroid Build Coastguard Worker{ 918*58b9f456SAndroid Build Coastguard Worker _VSTD::__throw_length_error("deque"); 919*58b9f456SAndroid Build Coastguard Worker} 920*58b9f456SAndroid Build Coastguard Worker 921*58b9f456SAndroid Build Coastguard Workertemplate <bool __b> 922*58b9f456SAndroid Build Coastguard Workervoid 923*58b9f456SAndroid Build Coastguard Worker__deque_base_common<__b>::__throw_out_of_range() const 924*58b9f456SAndroid Build Coastguard Worker{ 925*58b9f456SAndroid Build Coastguard Worker _VSTD::__throw_out_of_range("deque"); 926*58b9f456SAndroid Build Coastguard Worker} 927*58b9f456SAndroid Build Coastguard Worker 928*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 929*58b9f456SAndroid Build Coastguard Workerclass __deque_base 930*58b9f456SAndroid Build Coastguard Worker : protected __deque_base_common<true> 931*58b9f456SAndroid Build Coastguard Worker{ 932*58b9f456SAndroid Build Coastguard Worker __deque_base(const __deque_base& __c); 933*58b9f456SAndroid Build Coastguard Worker __deque_base& operator=(const __deque_base& __c); 934*58b9f456SAndroid Build Coastguard Workerpublic: 935*58b9f456SAndroid Build Coastguard Worker typedef _Allocator allocator_type; 936*58b9f456SAndroid Build Coastguard Worker typedef allocator_traits<allocator_type> __alloc_traits; 937*58b9f456SAndroid Build Coastguard Worker typedef typename __alloc_traits::size_type size_type; 938*58b9f456SAndroid Build Coastguard Workerprotected: 939*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 940*58b9f456SAndroid Build Coastguard Worker typedef value_type& reference; 941*58b9f456SAndroid Build Coastguard Worker typedef const value_type& const_reference; 942*58b9f456SAndroid Build Coastguard Worker typedef typename __alloc_traits::difference_type difference_type; 943*58b9f456SAndroid Build Coastguard Worker typedef typename __alloc_traits::pointer pointer; 944*58b9f456SAndroid Build Coastguard Worker typedef typename __alloc_traits::const_pointer const_pointer; 945*58b9f456SAndroid Build Coastguard Worker 946*58b9f456SAndroid Build Coastguard Worker static const difference_type __block_size; 947*58b9f456SAndroid Build Coastguard Worker 948*58b9f456SAndroid Build Coastguard Worker typedef typename __rebind_alloc_helper<__alloc_traits, pointer>::type __pointer_allocator; 949*58b9f456SAndroid Build Coastguard Worker typedef allocator_traits<__pointer_allocator> __map_traits; 950*58b9f456SAndroid Build Coastguard Worker typedef typename __map_traits::pointer __map_pointer; 951*58b9f456SAndroid Build Coastguard Worker typedef typename __rebind_alloc_helper<__alloc_traits, const_pointer>::type __const_pointer_allocator; 952*58b9f456SAndroid Build Coastguard Worker typedef typename allocator_traits<__const_pointer_allocator>::const_pointer __map_const_pointer; 953*58b9f456SAndroid Build Coastguard Worker typedef __split_buffer<pointer, __pointer_allocator> __map; 954*58b9f456SAndroid Build Coastguard Worker 955*58b9f456SAndroid Build Coastguard Worker typedef __deque_iterator<value_type, pointer, reference, __map_pointer, 956*58b9f456SAndroid Build Coastguard Worker difference_type> iterator; 957*58b9f456SAndroid Build Coastguard Worker typedef __deque_iterator<value_type, const_pointer, const_reference, __map_const_pointer, 958*58b9f456SAndroid Build Coastguard Worker difference_type> const_iterator; 959*58b9f456SAndroid Build Coastguard Worker 960*58b9f456SAndroid Build Coastguard Workerprotected: 961*58b9f456SAndroid Build Coastguard Worker __map __map_; 962*58b9f456SAndroid Build Coastguard Worker size_type __start_; 963*58b9f456SAndroid Build Coastguard Worker __compressed_pair<size_type, allocator_type> __size_; 964*58b9f456SAndroid Build Coastguard Worker 965*58b9f456SAndroid Build Coastguard Worker iterator begin() _NOEXCEPT; 966*58b9f456SAndroid Build Coastguard Worker const_iterator begin() const _NOEXCEPT; 967*58b9f456SAndroid Build Coastguard Worker iterator end() _NOEXCEPT; 968*58b9f456SAndroid Build Coastguard Worker const_iterator end() const _NOEXCEPT; 969*58b9f456SAndroid Build Coastguard Worker 970*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY size_type& size() {return __size_.first();} 971*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 972*58b9f456SAndroid Build Coastguard Worker const size_type& size() const _NOEXCEPT {return __size_.first();} 973*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY allocator_type& __alloc() {return __size_.second();} 974*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 975*58b9f456SAndroid Build Coastguard Worker const allocator_type& __alloc() const _NOEXCEPT {return __size_.second();} 976*58b9f456SAndroid Build Coastguard Worker 977*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 978*58b9f456SAndroid Build Coastguard Worker __deque_base() 979*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value); 980*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 981*58b9f456SAndroid Build Coastguard Worker explicit __deque_base(const allocator_type& __a); 982*58b9f456SAndroid Build Coastguard Workerpublic: 983*58b9f456SAndroid Build Coastguard Worker ~__deque_base(); 984*58b9f456SAndroid Build Coastguard Worker 985*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 986*58b9f456SAndroid Build Coastguard Worker __deque_base(__deque_base&& __c) 987*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value); 988*58b9f456SAndroid Build Coastguard Worker __deque_base(__deque_base&& __c, const allocator_type& __a); 989*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 990*58b9f456SAndroid Build Coastguard Worker 991*58b9f456SAndroid Build Coastguard Worker void swap(__deque_base& __c) 992*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER >= 14 993*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT; 994*58b9f456SAndroid Build Coastguard Worker#else 995*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || 996*58b9f456SAndroid Build Coastguard Worker __is_nothrow_swappable<allocator_type>::value); 997*58b9f456SAndroid Build Coastguard Worker#endif 998*58b9f456SAndroid Build Coastguard Workerprotected: 999*58b9f456SAndroid Build Coastguard Worker void clear() _NOEXCEPT; 1000*58b9f456SAndroid Build Coastguard Worker 1001*58b9f456SAndroid Build Coastguard Worker bool __invariants() const; 1002*58b9f456SAndroid Build Coastguard Worker 1003*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1004*58b9f456SAndroid Build Coastguard Worker void __move_assign(__deque_base& __c) 1005*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(__alloc_traits::propagate_on_container_move_assignment::value && 1006*58b9f456SAndroid Build Coastguard Worker is_nothrow_move_assignable<allocator_type>::value) 1007*58b9f456SAndroid Build Coastguard Worker { 1008*58b9f456SAndroid Build Coastguard Worker __map_ = _VSTD::move(__c.__map_); 1009*58b9f456SAndroid Build Coastguard Worker __start_ = __c.__start_; 1010*58b9f456SAndroid Build Coastguard Worker size() = __c.size(); 1011*58b9f456SAndroid Build Coastguard Worker __move_assign_alloc(__c); 1012*58b9f456SAndroid Build Coastguard Worker __c.__start_ = __c.size() = 0; 1013*58b9f456SAndroid Build Coastguard Worker } 1014*58b9f456SAndroid Build Coastguard Worker 1015*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1016*58b9f456SAndroid Build Coastguard Worker void __move_assign_alloc(__deque_base& __c) 1017*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(!__alloc_traits::propagate_on_container_move_assignment::value || 1018*58b9f456SAndroid Build Coastguard Worker is_nothrow_move_assignable<allocator_type>::value) 1019*58b9f456SAndroid Build Coastguard Worker {__move_assign_alloc(__c, integral_constant<bool, 1020*58b9f456SAndroid Build Coastguard Worker __alloc_traits::propagate_on_container_move_assignment::value>());} 1021*58b9f456SAndroid Build Coastguard Worker 1022*58b9f456SAndroid Build Coastguard Workerprivate: 1023*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1024*58b9f456SAndroid Build Coastguard Worker void __move_assign_alloc(__deque_base& __c, true_type) 1025*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value) 1026*58b9f456SAndroid Build Coastguard Worker { 1027*58b9f456SAndroid Build Coastguard Worker __alloc() = _VSTD::move(__c.__alloc()); 1028*58b9f456SAndroid Build Coastguard Worker } 1029*58b9f456SAndroid Build Coastguard Worker 1030*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1031*58b9f456SAndroid Build Coastguard Worker void __move_assign_alloc(__deque_base&, false_type) _NOEXCEPT 1032*58b9f456SAndroid Build Coastguard Worker {} 1033*58b9f456SAndroid Build Coastguard Worker}; 1034*58b9f456SAndroid Build Coastguard Worker 1035*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1036*58b9f456SAndroid Build Coastguard Workerconst typename __deque_base<_Tp, _Allocator>::difference_type 1037*58b9f456SAndroid Build Coastguard Worker __deque_base<_Tp, _Allocator>::__block_size = 1038*58b9f456SAndroid Build Coastguard Worker __deque_block_size<value_type, difference_type>::value; 1039*58b9f456SAndroid Build Coastguard Worker 1040*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1041*58b9f456SAndroid Build Coastguard Workerbool 1042*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::__invariants() const 1043*58b9f456SAndroid Build Coastguard Worker{ 1044*58b9f456SAndroid Build Coastguard Worker if (!__map_.__invariants()) 1045*58b9f456SAndroid Build Coastguard Worker return false; 1046*58b9f456SAndroid Build Coastguard Worker if (__map_.size() >= size_type(-1) / __block_size) 1047*58b9f456SAndroid Build Coastguard Worker return false; 1048*58b9f456SAndroid Build Coastguard Worker for (typename __map::const_iterator __i = __map_.begin(), __e = __map_.end(); 1049*58b9f456SAndroid Build Coastguard Worker __i != __e; ++__i) 1050*58b9f456SAndroid Build Coastguard Worker if (*__i == nullptr) 1051*58b9f456SAndroid Build Coastguard Worker return false; 1052*58b9f456SAndroid Build Coastguard Worker if (__map_.size() != 0) 1053*58b9f456SAndroid Build Coastguard Worker { 1054*58b9f456SAndroid Build Coastguard Worker if (size() >= __map_.size() * __block_size) 1055*58b9f456SAndroid Build Coastguard Worker return false; 1056*58b9f456SAndroid Build Coastguard Worker if (__start_ >= __map_.size() * __block_size - size()) 1057*58b9f456SAndroid Build Coastguard Worker return false; 1058*58b9f456SAndroid Build Coastguard Worker } 1059*58b9f456SAndroid Build Coastguard Worker else 1060*58b9f456SAndroid Build Coastguard Worker { 1061*58b9f456SAndroid Build Coastguard Worker if (size() != 0) 1062*58b9f456SAndroid Build Coastguard Worker return false; 1063*58b9f456SAndroid Build Coastguard Worker if (__start_ != 0) 1064*58b9f456SAndroid Build Coastguard Worker return false; 1065*58b9f456SAndroid Build Coastguard Worker } 1066*58b9f456SAndroid Build Coastguard Worker return true; 1067*58b9f456SAndroid Build Coastguard Worker} 1068*58b9f456SAndroid Build Coastguard Worker 1069*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1070*58b9f456SAndroid Build Coastguard Workertypename __deque_base<_Tp, _Allocator>::iterator 1071*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::begin() _NOEXCEPT 1072*58b9f456SAndroid Build Coastguard Worker{ 1073*58b9f456SAndroid Build Coastguard Worker __map_pointer __mp = __map_.begin() + __start_ / __block_size; 1074*58b9f456SAndroid Build Coastguard Worker return iterator(__mp, __map_.empty() ? 0 : *__mp + __start_ % __block_size); 1075*58b9f456SAndroid Build Coastguard Worker} 1076*58b9f456SAndroid Build Coastguard Worker 1077*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1078*58b9f456SAndroid Build Coastguard Workertypename __deque_base<_Tp, _Allocator>::const_iterator 1079*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::begin() const _NOEXCEPT 1080*58b9f456SAndroid Build Coastguard Worker{ 1081*58b9f456SAndroid Build Coastguard Worker __map_const_pointer __mp = static_cast<__map_const_pointer>(__map_.begin() + __start_ / __block_size); 1082*58b9f456SAndroid Build Coastguard Worker return const_iterator(__mp, __map_.empty() ? 0 : *__mp + __start_ % __block_size); 1083*58b9f456SAndroid Build Coastguard Worker} 1084*58b9f456SAndroid Build Coastguard Worker 1085*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1086*58b9f456SAndroid Build Coastguard Workertypename __deque_base<_Tp, _Allocator>::iterator 1087*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::end() _NOEXCEPT 1088*58b9f456SAndroid Build Coastguard Worker{ 1089*58b9f456SAndroid Build Coastguard Worker size_type __p = size() + __start_; 1090*58b9f456SAndroid Build Coastguard Worker __map_pointer __mp = __map_.begin() + __p / __block_size; 1091*58b9f456SAndroid Build Coastguard Worker return iterator(__mp, __map_.empty() ? 0 : *__mp + __p % __block_size); 1092*58b9f456SAndroid Build Coastguard Worker} 1093*58b9f456SAndroid Build Coastguard Worker 1094*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1095*58b9f456SAndroid Build Coastguard Workertypename __deque_base<_Tp, _Allocator>::const_iterator 1096*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::end() const _NOEXCEPT 1097*58b9f456SAndroid Build Coastguard Worker{ 1098*58b9f456SAndroid Build Coastguard Worker size_type __p = size() + __start_; 1099*58b9f456SAndroid Build Coastguard Worker __map_const_pointer __mp = static_cast<__map_const_pointer>(__map_.begin() + __p / __block_size); 1100*58b9f456SAndroid Build Coastguard Worker return const_iterator(__mp, __map_.empty() ? 0 : *__mp + __p % __block_size); 1101*58b9f456SAndroid Build Coastguard Worker} 1102*58b9f456SAndroid Build Coastguard Worker 1103*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1104*58b9f456SAndroid Build Coastguard Workerinline 1105*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::__deque_base() 1106*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value) 1107*58b9f456SAndroid Build Coastguard Worker : __start_(0), __size_(0) {} 1108*58b9f456SAndroid Build Coastguard Worker 1109*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1110*58b9f456SAndroid Build Coastguard Workerinline 1111*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::__deque_base(const allocator_type& __a) 1112*58b9f456SAndroid Build Coastguard Worker : __map_(__pointer_allocator(__a)), __start_(0), __size_(0, __a) {} 1113*58b9f456SAndroid Build Coastguard Worker 1114*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1115*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::~__deque_base() 1116*58b9f456SAndroid Build Coastguard Worker{ 1117*58b9f456SAndroid Build Coastguard Worker clear(); 1118*58b9f456SAndroid Build Coastguard Worker typename __map::iterator __i = __map_.begin(); 1119*58b9f456SAndroid Build Coastguard Worker typename __map::iterator __e = __map_.end(); 1120*58b9f456SAndroid Build Coastguard Worker for (; __i != __e; ++__i) 1121*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__alloc(), *__i, __block_size); 1122*58b9f456SAndroid Build Coastguard Worker} 1123*58b9f456SAndroid Build Coastguard Worker 1124*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1125*58b9f456SAndroid Build Coastguard Worker 1126*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1127*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::__deque_base(__deque_base&& __c) 1128*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_move_constructible<allocator_type>::value) 1129*58b9f456SAndroid Build Coastguard Worker : __map_(_VSTD::move(__c.__map_)), 1130*58b9f456SAndroid Build Coastguard Worker __start_(_VSTD::move(__c.__start_)), 1131*58b9f456SAndroid Build Coastguard Worker __size_(_VSTD::move(__c.__size_)) 1132*58b9f456SAndroid Build Coastguard Worker{ 1133*58b9f456SAndroid Build Coastguard Worker __c.__start_ = 0; 1134*58b9f456SAndroid Build Coastguard Worker __c.size() = 0; 1135*58b9f456SAndroid Build Coastguard Worker} 1136*58b9f456SAndroid Build Coastguard Worker 1137*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1138*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::__deque_base(__deque_base&& __c, const allocator_type& __a) 1139*58b9f456SAndroid Build Coastguard Worker : __map_(_VSTD::move(__c.__map_), __pointer_allocator(__a)), 1140*58b9f456SAndroid Build Coastguard Worker __start_(_VSTD::move(__c.__start_)), 1141*58b9f456SAndroid Build Coastguard Worker __size_(_VSTD::move(__c.size()), __a) 1142*58b9f456SAndroid Build Coastguard Worker{ 1143*58b9f456SAndroid Build Coastguard Worker if (__a == __c.__alloc()) 1144*58b9f456SAndroid Build Coastguard Worker { 1145*58b9f456SAndroid Build Coastguard Worker __c.__start_ = 0; 1146*58b9f456SAndroid Build Coastguard Worker __c.size() = 0; 1147*58b9f456SAndroid Build Coastguard Worker } 1148*58b9f456SAndroid Build Coastguard Worker else 1149*58b9f456SAndroid Build Coastguard Worker { 1150*58b9f456SAndroid Build Coastguard Worker __map_.clear(); 1151*58b9f456SAndroid Build Coastguard Worker __start_ = 0; 1152*58b9f456SAndroid Build Coastguard Worker size() = 0; 1153*58b9f456SAndroid Build Coastguard Worker } 1154*58b9f456SAndroid Build Coastguard Worker} 1155*58b9f456SAndroid Build Coastguard Worker 1156*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 1157*58b9f456SAndroid Build Coastguard Worker 1158*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1159*58b9f456SAndroid Build Coastguard Workervoid 1160*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::swap(__deque_base& __c) 1161*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER >= 14 1162*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT 1163*58b9f456SAndroid Build Coastguard Worker#else 1164*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || 1165*58b9f456SAndroid Build Coastguard Worker __is_nothrow_swappable<allocator_type>::value) 1166*58b9f456SAndroid Build Coastguard Worker#endif 1167*58b9f456SAndroid Build Coastguard Worker{ 1168*58b9f456SAndroid Build Coastguard Worker __map_.swap(__c.__map_); 1169*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__start_, __c.__start_); 1170*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(size(), __c.size()); 1171*58b9f456SAndroid Build Coastguard Worker __swap_allocator(__alloc(), __c.__alloc()); 1172*58b9f456SAndroid Build Coastguard Worker} 1173*58b9f456SAndroid Build Coastguard Worker 1174*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1175*58b9f456SAndroid Build Coastguard Workervoid 1176*58b9f456SAndroid Build Coastguard Worker__deque_base<_Tp, _Allocator>::clear() _NOEXCEPT 1177*58b9f456SAndroid Build Coastguard Worker{ 1178*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __alloc(); 1179*58b9f456SAndroid Build Coastguard Worker for (iterator __i = begin(), __e = end(); __i != __e; ++__i) 1180*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, _VSTD::addressof(*__i)); 1181*58b9f456SAndroid Build Coastguard Worker size() = 0; 1182*58b9f456SAndroid Build Coastguard Worker while (__map_.size() > 2) 1183*58b9f456SAndroid Build Coastguard Worker { 1184*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __map_.front(), __block_size); 1185*58b9f456SAndroid Build Coastguard Worker __map_.pop_front(); 1186*58b9f456SAndroid Build Coastguard Worker } 1187*58b9f456SAndroid Build Coastguard Worker switch (__map_.size()) 1188*58b9f456SAndroid Build Coastguard Worker { 1189*58b9f456SAndroid Build Coastguard Worker case 1: 1190*58b9f456SAndroid Build Coastguard Worker __start_ = __block_size / 2; 1191*58b9f456SAndroid Build Coastguard Worker break; 1192*58b9f456SAndroid Build Coastguard Worker case 2: 1193*58b9f456SAndroid Build Coastguard Worker __start_ = __block_size; 1194*58b9f456SAndroid Build Coastguard Worker break; 1195*58b9f456SAndroid Build Coastguard Worker } 1196*58b9f456SAndroid Build Coastguard Worker} 1197*58b9f456SAndroid Build Coastguard Worker 1198*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator /*= allocator<_Tp>*/> 1199*58b9f456SAndroid Build Coastguard Workerclass _LIBCPP_TEMPLATE_VIS deque 1200*58b9f456SAndroid Build Coastguard Worker : private __deque_base<_Tp, _Allocator> 1201*58b9f456SAndroid Build Coastguard Worker{ 1202*58b9f456SAndroid Build Coastguard Workerpublic: 1203*58b9f456SAndroid Build Coastguard Worker // types: 1204*58b9f456SAndroid Build Coastguard Worker 1205*58b9f456SAndroid Build Coastguard Worker typedef _Tp value_type; 1206*58b9f456SAndroid Build Coastguard Worker typedef _Allocator allocator_type; 1207*58b9f456SAndroid Build Coastguard Worker 1208*58b9f456SAndroid Build Coastguard Worker static_assert((is_same<typename allocator_type::value_type, value_type>::value), 1209*58b9f456SAndroid Build Coastguard Worker "Allocator::value_type must be same type as value_type"); 1210*58b9f456SAndroid Build Coastguard Worker 1211*58b9f456SAndroid Build Coastguard Worker typedef __deque_base<value_type, allocator_type> __base; 1212*58b9f456SAndroid Build Coastguard Worker 1213*58b9f456SAndroid Build Coastguard Worker typedef typename __base::__alloc_traits __alloc_traits; 1214*58b9f456SAndroid Build Coastguard Worker typedef typename __base::reference reference; 1215*58b9f456SAndroid Build Coastguard Worker typedef typename __base::const_reference const_reference; 1216*58b9f456SAndroid Build Coastguard Worker typedef typename __base::iterator iterator; 1217*58b9f456SAndroid Build Coastguard Worker typedef typename __base::const_iterator const_iterator; 1218*58b9f456SAndroid Build Coastguard Worker typedef typename __base::size_type size_type; 1219*58b9f456SAndroid Build Coastguard Worker typedef typename __base::difference_type difference_type; 1220*58b9f456SAndroid Build Coastguard Worker 1221*58b9f456SAndroid Build Coastguard Worker typedef typename __base::pointer pointer; 1222*58b9f456SAndroid Build Coastguard Worker typedef typename __base::const_pointer const_pointer; 1223*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::reverse_iterator<iterator> reverse_iterator; 1224*58b9f456SAndroid Build Coastguard Worker typedef _VSTD::reverse_iterator<const_iterator> const_reverse_iterator; 1225*58b9f456SAndroid Build Coastguard Worker 1226*58b9f456SAndroid Build Coastguard Worker // construct/copy/destroy: 1227*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1228*58b9f456SAndroid Build Coastguard Worker deque() 1229*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_default_constructible<allocator_type>::value) 1230*58b9f456SAndroid Build Coastguard Worker {} 1231*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY explicit deque(const allocator_type& __a) : __base(__a) {} 1232*58b9f456SAndroid Build Coastguard Worker explicit deque(size_type __n); 1233*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 1234*58b9f456SAndroid Build Coastguard Worker explicit deque(size_type __n, const _Allocator& __a); 1235*58b9f456SAndroid Build Coastguard Worker#endif 1236*58b9f456SAndroid Build Coastguard Worker deque(size_type __n, const value_type& __v); 1237*58b9f456SAndroid Build Coastguard Worker deque(size_type __n, const value_type& __v, const allocator_type& __a); 1238*58b9f456SAndroid Build Coastguard Worker template <class _InputIter> 1239*58b9f456SAndroid Build Coastguard Worker deque(_InputIter __f, _InputIter __l, 1240*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value>::type* = 0); 1241*58b9f456SAndroid Build Coastguard Worker template <class _InputIter> 1242*58b9f456SAndroid Build Coastguard Worker deque(_InputIter __f, _InputIter __l, const allocator_type& __a, 1243*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value>::type* = 0); 1244*58b9f456SAndroid Build Coastguard Worker deque(const deque& __c); 1245*58b9f456SAndroid Build Coastguard Worker deque(const deque& __c, const allocator_type& __a); 1246*58b9f456SAndroid Build Coastguard Worker 1247*58b9f456SAndroid Build Coastguard Worker deque& operator=(const deque& __c); 1248*58b9f456SAndroid Build Coastguard Worker 1249*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1250*58b9f456SAndroid Build Coastguard Worker deque(initializer_list<value_type> __il); 1251*58b9f456SAndroid Build Coastguard Worker deque(initializer_list<value_type> __il, const allocator_type& __a); 1252*58b9f456SAndroid Build Coastguard Worker 1253*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1254*58b9f456SAndroid Build Coastguard Worker deque& operator=(initializer_list<value_type> __il) {assign(__il); return *this;} 1255*58b9f456SAndroid Build Coastguard Worker 1256*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1257*58b9f456SAndroid Build Coastguard Worker deque(deque&& __c) _NOEXCEPT_(is_nothrow_move_constructible<__base>::value); 1258*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1259*58b9f456SAndroid Build Coastguard Worker deque(deque&& __c, const allocator_type& __a); 1260*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1261*58b9f456SAndroid Build Coastguard Worker deque& operator=(deque&& __c) 1262*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(__alloc_traits::propagate_on_container_move_assignment::value && 1263*58b9f456SAndroid Build Coastguard Worker is_nothrow_move_assignable<allocator_type>::value); 1264*58b9f456SAndroid Build Coastguard Worker 1265*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1266*58b9f456SAndroid Build Coastguard Worker void assign(initializer_list<value_type> __il) {assign(__il.begin(), __il.end());} 1267*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 1268*58b9f456SAndroid Build Coastguard Worker 1269*58b9f456SAndroid Build Coastguard Worker template <class _InputIter> 1270*58b9f456SAndroid Build Coastguard Worker void assign(_InputIter __f, _InputIter __l, 1271*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value && 1272*58b9f456SAndroid Build Coastguard Worker !__is_random_access_iterator<_InputIter>::value>::type* = 0); 1273*58b9f456SAndroid Build Coastguard Worker template <class _RAIter> 1274*58b9f456SAndroid Build Coastguard Worker void assign(_RAIter __f, _RAIter __l, 1275*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type* = 0); 1276*58b9f456SAndroid Build Coastguard Worker void assign(size_type __n, const value_type& __v); 1277*58b9f456SAndroid Build Coastguard Worker 1278*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1279*58b9f456SAndroid Build Coastguard Worker allocator_type get_allocator() const _NOEXCEPT; 1280*58b9f456SAndroid Build Coastguard Worker 1281*58b9f456SAndroid Build Coastguard Worker // iterators: 1282*58b9f456SAndroid Build Coastguard Worker 1283*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1284*58b9f456SAndroid Build Coastguard Worker iterator begin() _NOEXCEPT {return __base::begin();} 1285*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1286*58b9f456SAndroid Build Coastguard Worker const_iterator begin() const _NOEXCEPT {return __base::begin();} 1287*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1288*58b9f456SAndroid Build Coastguard Worker iterator end() _NOEXCEPT {return __base::end();} 1289*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1290*58b9f456SAndroid Build Coastguard Worker const_iterator end() const _NOEXCEPT {return __base::end();} 1291*58b9f456SAndroid Build Coastguard Worker 1292*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1293*58b9f456SAndroid Build Coastguard Worker reverse_iterator rbegin() _NOEXCEPT 1294*58b9f456SAndroid Build Coastguard Worker {return reverse_iterator(__base::end());} 1295*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1296*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator rbegin() const _NOEXCEPT 1297*58b9f456SAndroid Build Coastguard Worker {return const_reverse_iterator(__base::end());} 1298*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1299*58b9f456SAndroid Build Coastguard Worker reverse_iterator rend() _NOEXCEPT 1300*58b9f456SAndroid Build Coastguard Worker {return reverse_iterator(__base::begin());} 1301*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1302*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator rend() const _NOEXCEPT 1303*58b9f456SAndroid Build Coastguard Worker {return const_reverse_iterator(__base::begin());} 1304*58b9f456SAndroid Build Coastguard Worker 1305*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1306*58b9f456SAndroid Build Coastguard Worker const_iterator cbegin() const _NOEXCEPT 1307*58b9f456SAndroid Build Coastguard Worker {return __base::begin();} 1308*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1309*58b9f456SAndroid Build Coastguard Worker const_iterator cend() const _NOEXCEPT 1310*58b9f456SAndroid Build Coastguard Worker {return __base::end();} 1311*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1312*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator crbegin() const _NOEXCEPT 1313*58b9f456SAndroid Build Coastguard Worker {return const_reverse_iterator(__base::end());} 1314*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1315*58b9f456SAndroid Build Coastguard Worker const_reverse_iterator crend() const _NOEXCEPT 1316*58b9f456SAndroid Build Coastguard Worker {return const_reverse_iterator(__base::begin());} 1317*58b9f456SAndroid Build Coastguard Worker 1318*58b9f456SAndroid Build Coastguard Worker // capacity: 1319*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1320*58b9f456SAndroid Build Coastguard Worker size_type size() const _NOEXCEPT {return __base::size();} 1321*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1322*58b9f456SAndroid Build Coastguard Worker size_type max_size() const _NOEXCEPT 1323*58b9f456SAndroid Build Coastguard Worker {return std::min<size_type>( 1324*58b9f456SAndroid Build Coastguard Worker __alloc_traits::max_size(__base::__alloc()), 1325*58b9f456SAndroid Build Coastguard Worker numeric_limits<difference_type>::max());} 1326*58b9f456SAndroid Build Coastguard Worker void resize(size_type __n); 1327*58b9f456SAndroid Build Coastguard Worker void resize(size_type __n, const value_type& __v); 1328*58b9f456SAndroid Build Coastguard Worker void shrink_to_fit() _NOEXCEPT; 1329*58b9f456SAndroid Build Coastguard Worker _LIBCPP_NODISCARD_AFTER_CXX17 _LIBCPP_INLINE_VISIBILITY 1330*58b9f456SAndroid Build Coastguard Worker bool empty() const _NOEXCEPT {return __base::size() == 0;} 1331*58b9f456SAndroid Build Coastguard Worker 1332*58b9f456SAndroid Build Coastguard Worker // element access: 1333*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1334*58b9f456SAndroid Build Coastguard Worker reference operator[](size_type __i); 1335*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1336*58b9f456SAndroid Build Coastguard Worker const_reference operator[](size_type __i) const; 1337*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1338*58b9f456SAndroid Build Coastguard Worker reference at(size_type __i); 1339*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1340*58b9f456SAndroid Build Coastguard Worker const_reference at(size_type __i) const; 1341*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1342*58b9f456SAndroid Build Coastguard Worker reference front(); 1343*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1344*58b9f456SAndroid Build Coastguard Worker const_reference front() const; 1345*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1346*58b9f456SAndroid Build Coastguard Worker reference back(); 1347*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1348*58b9f456SAndroid Build Coastguard Worker const_reference back() const; 1349*58b9f456SAndroid Build Coastguard Worker 1350*58b9f456SAndroid Build Coastguard Worker // 23.2.2.3 modifiers: 1351*58b9f456SAndroid Build Coastguard Worker void push_front(const value_type& __v); 1352*58b9f456SAndroid Build Coastguard Worker void push_back(const value_type& __v); 1353*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1354*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14 1355*58b9f456SAndroid Build Coastguard Worker template <class... _Args> reference emplace_front(_Args&&... __args); 1356*58b9f456SAndroid Build Coastguard Worker template <class... _Args> reference emplace_back (_Args&&... __args); 1357*58b9f456SAndroid Build Coastguard Worker#else 1358*58b9f456SAndroid Build Coastguard Worker template <class... _Args> void emplace_front(_Args&&... __args); 1359*58b9f456SAndroid Build Coastguard Worker template <class... _Args> void emplace_back (_Args&&... __args); 1360*58b9f456SAndroid Build Coastguard Worker#endif 1361*58b9f456SAndroid Build Coastguard Worker template <class... _Args> iterator emplace(const_iterator __p, _Args&&... __args); 1362*58b9f456SAndroid Build Coastguard Worker 1363*58b9f456SAndroid Build Coastguard Worker void push_front(value_type&& __v); 1364*58b9f456SAndroid Build Coastguard Worker void push_back(value_type&& __v); 1365*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, value_type&& __v); 1366*58b9f456SAndroid Build Coastguard Worker 1367*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1368*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, initializer_list<value_type> __il) 1369*58b9f456SAndroid Build Coastguard Worker {return insert(__p, __il.begin(), __il.end());} 1370*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 1371*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, const value_type& __v); 1372*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, size_type __n, const value_type& __v); 1373*58b9f456SAndroid Build Coastguard Worker template <class _InputIter> 1374*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, _InputIter __f, _InputIter __l, 1375*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value 1376*58b9f456SAndroid Build Coastguard Worker &&!__is_forward_iterator<_InputIter>::value>::type* = 0); 1377*58b9f456SAndroid Build Coastguard Worker template <class _ForwardIterator> 1378*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, _ForwardIterator __f, _ForwardIterator __l, 1379*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_forward_iterator<_ForwardIterator>::value 1380*58b9f456SAndroid Build Coastguard Worker &&!__is_bidirectional_iterator<_ForwardIterator>::value>::type* = 0); 1381*58b9f456SAndroid Build Coastguard Worker template <class _BiIter> 1382*58b9f456SAndroid Build Coastguard Worker iterator insert(const_iterator __p, _BiIter __f, _BiIter __l, 1383*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_bidirectional_iterator<_BiIter>::value>::type* = 0); 1384*58b9f456SAndroid Build Coastguard Worker 1385*58b9f456SAndroid Build Coastguard Worker void pop_front(); 1386*58b9f456SAndroid Build Coastguard Worker void pop_back(); 1387*58b9f456SAndroid Build Coastguard Worker iterator erase(const_iterator __p); 1388*58b9f456SAndroid Build Coastguard Worker iterator erase(const_iterator __f, const_iterator __l); 1389*58b9f456SAndroid Build Coastguard Worker 1390*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1391*58b9f456SAndroid Build Coastguard Worker void swap(deque& __c) 1392*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER >= 14 1393*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT; 1394*58b9f456SAndroid Build Coastguard Worker#else 1395*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || 1396*58b9f456SAndroid Build Coastguard Worker __is_nothrow_swappable<allocator_type>::value); 1397*58b9f456SAndroid Build Coastguard Worker#endif 1398*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1399*58b9f456SAndroid Build Coastguard Worker void clear() _NOEXCEPT; 1400*58b9f456SAndroid Build Coastguard Worker 1401*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1402*58b9f456SAndroid Build Coastguard Worker bool __invariants() const {return __base::__invariants();} 1403*58b9f456SAndroid Build Coastguard Workerprivate: 1404*58b9f456SAndroid Build Coastguard Worker typedef typename __base::__map_const_pointer __map_const_pointer; 1405*58b9f456SAndroid Build Coastguard Worker 1406*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1407*58b9f456SAndroid Build Coastguard Worker static size_type __recommend_blocks(size_type __n) 1408*58b9f456SAndroid Build Coastguard Worker { 1409*58b9f456SAndroid Build Coastguard Worker return __n / __base::__block_size + (__n % __base::__block_size != 0); 1410*58b9f456SAndroid Build Coastguard Worker } 1411*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1412*58b9f456SAndroid Build Coastguard Worker size_type __capacity() const 1413*58b9f456SAndroid Build Coastguard Worker { 1414*58b9f456SAndroid Build Coastguard Worker return __base::__map_.size() == 0 ? 0 : __base::__map_.size() * __base::__block_size - 1; 1415*58b9f456SAndroid Build Coastguard Worker } 1416*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1417*58b9f456SAndroid Build Coastguard Worker size_type __front_spare() const 1418*58b9f456SAndroid Build Coastguard Worker { 1419*58b9f456SAndroid Build Coastguard Worker return __base::__start_; 1420*58b9f456SAndroid Build Coastguard Worker } 1421*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1422*58b9f456SAndroid Build Coastguard Worker size_type __back_spare() const 1423*58b9f456SAndroid Build Coastguard Worker { 1424*58b9f456SAndroid Build Coastguard Worker return __capacity() - (__base::__start_ + __base::size()); 1425*58b9f456SAndroid Build Coastguard Worker } 1426*58b9f456SAndroid Build Coastguard Worker 1427*58b9f456SAndroid Build Coastguard Worker template <class _InpIter> 1428*58b9f456SAndroid Build Coastguard Worker void __append(_InpIter __f, _InpIter __l, 1429*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InpIter>::value && 1430*58b9f456SAndroid Build Coastguard Worker !__is_forward_iterator<_InpIter>::value>::type* = 0); 1431*58b9f456SAndroid Build Coastguard Worker template <class _ForIter> 1432*58b9f456SAndroid Build Coastguard Worker void __append(_ForIter __f, _ForIter __l, 1433*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_forward_iterator<_ForIter>::value>::type* = 0); 1434*58b9f456SAndroid Build Coastguard Worker void __append(size_type __n); 1435*58b9f456SAndroid Build Coastguard Worker void __append(size_type __n, const value_type& __v); 1436*58b9f456SAndroid Build Coastguard Worker void __erase_to_end(const_iterator __f); 1437*58b9f456SAndroid Build Coastguard Worker void __add_front_capacity(); 1438*58b9f456SAndroid Build Coastguard Worker void __add_front_capacity(size_type __n); 1439*58b9f456SAndroid Build Coastguard Worker void __add_back_capacity(); 1440*58b9f456SAndroid Build Coastguard Worker void __add_back_capacity(size_type __n); 1441*58b9f456SAndroid Build Coastguard Worker iterator __move_and_check(iterator __f, iterator __l, iterator __r, 1442*58b9f456SAndroid Build Coastguard Worker const_pointer& __vt); 1443*58b9f456SAndroid Build Coastguard Worker iterator __move_backward_and_check(iterator __f, iterator __l, iterator __r, 1444*58b9f456SAndroid Build Coastguard Worker const_pointer& __vt); 1445*58b9f456SAndroid Build Coastguard Worker void __move_construct_and_check(iterator __f, iterator __l, 1446*58b9f456SAndroid Build Coastguard Worker iterator __r, const_pointer& __vt); 1447*58b9f456SAndroid Build Coastguard Worker void __move_construct_backward_and_check(iterator __f, iterator __l, 1448*58b9f456SAndroid Build Coastguard Worker iterator __r, const_pointer& __vt); 1449*58b9f456SAndroid Build Coastguard Worker 1450*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1451*58b9f456SAndroid Build Coastguard Worker void __copy_assign_alloc(const deque& __c) 1452*58b9f456SAndroid Build Coastguard Worker {__copy_assign_alloc(__c, integral_constant<bool, 1453*58b9f456SAndroid Build Coastguard Worker __alloc_traits::propagate_on_container_copy_assignment::value>());} 1454*58b9f456SAndroid Build Coastguard Worker 1455*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1456*58b9f456SAndroid Build Coastguard Worker void __copy_assign_alloc(const deque& __c, true_type) 1457*58b9f456SAndroid Build Coastguard Worker { 1458*58b9f456SAndroid Build Coastguard Worker if (__base::__alloc() != __c.__alloc()) 1459*58b9f456SAndroid Build Coastguard Worker { 1460*58b9f456SAndroid Build Coastguard Worker clear(); 1461*58b9f456SAndroid Build Coastguard Worker shrink_to_fit(); 1462*58b9f456SAndroid Build Coastguard Worker } 1463*58b9f456SAndroid Build Coastguard Worker __base::__alloc() = __c.__alloc(); 1464*58b9f456SAndroid Build Coastguard Worker __base::__map_.__alloc() = __c.__map_.__alloc(); 1465*58b9f456SAndroid Build Coastguard Worker } 1466*58b9f456SAndroid Build Coastguard Worker 1467*58b9f456SAndroid Build Coastguard Worker _LIBCPP_INLINE_VISIBILITY 1468*58b9f456SAndroid Build Coastguard Worker void __copy_assign_alloc(const deque&, false_type) 1469*58b9f456SAndroid Build Coastguard Worker {} 1470*58b9f456SAndroid Build Coastguard Worker 1471*58b9f456SAndroid Build Coastguard Worker void __move_assign(deque& __c, true_type) 1472*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value); 1473*58b9f456SAndroid Build Coastguard Worker void __move_assign(deque& __c, false_type); 1474*58b9f456SAndroid Build Coastguard Worker}; 1475*58b9f456SAndroid Build Coastguard Worker 1476*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_HAS_NO_DEDUCTION_GUIDES 1477*58b9f456SAndroid Build Coastguard Workertemplate<class _InputIterator, 1478*58b9f456SAndroid Build Coastguard Worker class _Alloc = typename std::allocator<typename iterator_traits<_InputIterator>::value_type>, 1479*58b9f456SAndroid Build Coastguard Worker class = typename enable_if<__is_allocator<_Alloc>::value, void>::type 1480*58b9f456SAndroid Build Coastguard Worker > 1481*58b9f456SAndroid Build Coastguard Workerdeque(_InputIterator, _InputIterator) 1482*58b9f456SAndroid Build Coastguard Worker -> deque<typename iterator_traits<_InputIterator>::value_type, _Alloc>; 1483*58b9f456SAndroid Build Coastguard Worker 1484*58b9f456SAndroid Build Coastguard Workertemplate<class _InputIterator, 1485*58b9f456SAndroid Build Coastguard Worker class _Alloc, 1486*58b9f456SAndroid Build Coastguard Worker class = typename enable_if<__is_allocator<_Alloc>::value, void>::type 1487*58b9f456SAndroid Build Coastguard Worker > 1488*58b9f456SAndroid Build Coastguard Workerdeque(_InputIterator, _InputIterator, _Alloc) 1489*58b9f456SAndroid Build Coastguard Worker -> deque<typename iterator_traits<_InputIterator>::value_type, _Alloc>; 1490*58b9f456SAndroid Build Coastguard Worker#endif 1491*58b9f456SAndroid Build Coastguard Worker 1492*58b9f456SAndroid Build Coastguard Worker 1493*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1494*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(size_type __n) 1495*58b9f456SAndroid Build Coastguard Worker{ 1496*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 1497*58b9f456SAndroid Build Coastguard Worker __append(__n); 1498*58b9f456SAndroid Build Coastguard Worker} 1499*58b9f456SAndroid Build Coastguard Worker 1500*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 11 1501*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1502*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(size_type __n, const _Allocator& __a) 1503*58b9f456SAndroid Build Coastguard Worker : __base(__a) 1504*58b9f456SAndroid Build Coastguard Worker{ 1505*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 1506*58b9f456SAndroid Build Coastguard Worker __append(__n); 1507*58b9f456SAndroid Build Coastguard Worker} 1508*58b9f456SAndroid Build Coastguard Worker#endif 1509*58b9f456SAndroid Build Coastguard Worker 1510*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1511*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v) 1512*58b9f456SAndroid Build Coastguard Worker{ 1513*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 1514*58b9f456SAndroid Build Coastguard Worker __append(__n, __v); 1515*58b9f456SAndroid Build Coastguard Worker} 1516*58b9f456SAndroid Build Coastguard Worker 1517*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1518*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(size_type __n, const value_type& __v, const allocator_type& __a) 1519*58b9f456SAndroid Build Coastguard Worker : __base(__a) 1520*58b9f456SAndroid Build Coastguard Worker{ 1521*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 1522*58b9f456SAndroid Build Coastguard Worker __append(__n, __v); 1523*58b9f456SAndroid Build Coastguard Worker} 1524*58b9f456SAndroid Build Coastguard Worker 1525*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1526*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter> 1527*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(_InputIter __f, _InputIter __l, 1528*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value>::type*) 1529*58b9f456SAndroid Build Coastguard Worker{ 1530*58b9f456SAndroid Build Coastguard Worker __append(__f, __l); 1531*58b9f456SAndroid Build Coastguard Worker} 1532*58b9f456SAndroid Build Coastguard Worker 1533*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1534*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter> 1535*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(_InputIter __f, _InputIter __l, const allocator_type& __a, 1536*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value>::type*) 1537*58b9f456SAndroid Build Coastguard Worker : __base(__a) 1538*58b9f456SAndroid Build Coastguard Worker{ 1539*58b9f456SAndroid Build Coastguard Worker __append(__f, __l); 1540*58b9f456SAndroid Build Coastguard Worker} 1541*58b9f456SAndroid Build Coastguard Worker 1542*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1543*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(const deque& __c) 1544*58b9f456SAndroid Build Coastguard Worker : __base(__alloc_traits::select_on_container_copy_construction(__c.__alloc())) 1545*58b9f456SAndroid Build Coastguard Worker{ 1546*58b9f456SAndroid Build Coastguard Worker __append(__c.begin(), __c.end()); 1547*58b9f456SAndroid Build Coastguard Worker} 1548*58b9f456SAndroid Build Coastguard Worker 1549*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1550*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(const deque& __c, const allocator_type& __a) 1551*58b9f456SAndroid Build Coastguard Worker : __base(__a) 1552*58b9f456SAndroid Build Coastguard Worker{ 1553*58b9f456SAndroid Build Coastguard Worker __append(__c.begin(), __c.end()); 1554*58b9f456SAndroid Build Coastguard Worker} 1555*58b9f456SAndroid Build Coastguard Worker 1556*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1557*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>& 1558*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::operator=(const deque& __c) 1559*58b9f456SAndroid Build Coastguard Worker{ 1560*58b9f456SAndroid Build Coastguard Worker if (this != &__c) 1561*58b9f456SAndroid Build Coastguard Worker { 1562*58b9f456SAndroid Build Coastguard Worker __copy_assign_alloc(__c); 1563*58b9f456SAndroid Build Coastguard Worker assign(__c.begin(), __c.end()); 1564*58b9f456SAndroid Build Coastguard Worker } 1565*58b9f456SAndroid Build Coastguard Worker return *this; 1566*58b9f456SAndroid Build Coastguard Worker} 1567*58b9f456SAndroid Build Coastguard Worker 1568*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1569*58b9f456SAndroid Build Coastguard Worker 1570*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1571*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(initializer_list<value_type> __il) 1572*58b9f456SAndroid Build Coastguard Worker{ 1573*58b9f456SAndroid Build Coastguard Worker __append(__il.begin(), __il.end()); 1574*58b9f456SAndroid Build Coastguard Worker} 1575*58b9f456SAndroid Build Coastguard Worker 1576*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1577*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(initializer_list<value_type> __il, const allocator_type& __a) 1578*58b9f456SAndroid Build Coastguard Worker : __base(__a) 1579*58b9f456SAndroid Build Coastguard Worker{ 1580*58b9f456SAndroid Build Coastguard Worker __append(__il.begin(), __il.end()); 1581*58b9f456SAndroid Build Coastguard Worker} 1582*58b9f456SAndroid Build Coastguard Worker 1583*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1584*58b9f456SAndroid Build Coastguard Workerinline 1585*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(deque&& __c) 1586*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_move_constructible<__base>::value) 1587*58b9f456SAndroid Build Coastguard Worker : __base(_VSTD::move(__c)) 1588*58b9f456SAndroid Build Coastguard Worker{ 1589*58b9f456SAndroid Build Coastguard Worker} 1590*58b9f456SAndroid Build Coastguard Worker 1591*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1592*58b9f456SAndroid Build Coastguard Workerinline 1593*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::deque(deque&& __c, const allocator_type& __a) 1594*58b9f456SAndroid Build Coastguard Worker : __base(_VSTD::move(__c), __a) 1595*58b9f456SAndroid Build Coastguard Worker{ 1596*58b9f456SAndroid Build Coastguard Worker if (__a != __c.__alloc()) 1597*58b9f456SAndroid Build Coastguard Worker { 1598*58b9f456SAndroid Build Coastguard Worker typedef move_iterator<iterator> _Ip; 1599*58b9f456SAndroid Build Coastguard Worker assign(_Ip(__c.begin()), _Ip(__c.end())); 1600*58b9f456SAndroid Build Coastguard Worker } 1601*58b9f456SAndroid Build Coastguard Worker} 1602*58b9f456SAndroid Build Coastguard Worker 1603*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1604*58b9f456SAndroid Build Coastguard Workerinline 1605*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>& 1606*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::operator=(deque&& __c) 1607*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(__alloc_traits::propagate_on_container_move_assignment::value && 1608*58b9f456SAndroid Build Coastguard Worker is_nothrow_move_assignable<allocator_type>::value) 1609*58b9f456SAndroid Build Coastguard Worker{ 1610*58b9f456SAndroid Build Coastguard Worker __move_assign(__c, integral_constant<bool, 1611*58b9f456SAndroid Build Coastguard Worker __alloc_traits::propagate_on_container_move_assignment::value>()); 1612*58b9f456SAndroid Build Coastguard Worker return *this; 1613*58b9f456SAndroid Build Coastguard Worker} 1614*58b9f456SAndroid Build Coastguard Worker 1615*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1616*58b9f456SAndroid Build Coastguard Workervoid 1617*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__move_assign(deque& __c, false_type) 1618*58b9f456SAndroid Build Coastguard Worker{ 1619*58b9f456SAndroid Build Coastguard Worker if (__base::__alloc() != __c.__alloc()) 1620*58b9f456SAndroid Build Coastguard Worker { 1621*58b9f456SAndroid Build Coastguard Worker typedef move_iterator<iterator> _Ip; 1622*58b9f456SAndroid Build Coastguard Worker assign(_Ip(__c.begin()), _Ip(__c.end())); 1623*58b9f456SAndroid Build Coastguard Worker } 1624*58b9f456SAndroid Build Coastguard Worker else 1625*58b9f456SAndroid Build Coastguard Worker __move_assign(__c, true_type()); 1626*58b9f456SAndroid Build Coastguard Worker} 1627*58b9f456SAndroid Build Coastguard Worker 1628*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1629*58b9f456SAndroid Build Coastguard Workervoid 1630*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__move_assign(deque& __c, true_type) 1631*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(is_nothrow_move_assignable<allocator_type>::value) 1632*58b9f456SAndroid Build Coastguard Worker{ 1633*58b9f456SAndroid Build Coastguard Worker clear(); 1634*58b9f456SAndroid Build Coastguard Worker shrink_to_fit(); 1635*58b9f456SAndroid Build Coastguard Worker __base::__move_assign(__c); 1636*58b9f456SAndroid Build Coastguard Worker} 1637*58b9f456SAndroid Build Coastguard Worker 1638*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 1639*58b9f456SAndroid Build Coastguard Worker 1640*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1641*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter> 1642*58b9f456SAndroid Build Coastguard Workervoid 1643*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::assign(_InputIter __f, _InputIter __l, 1644*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value && 1645*58b9f456SAndroid Build Coastguard Worker !__is_random_access_iterator<_InputIter>::value>::type*) 1646*58b9f456SAndroid Build Coastguard Worker{ 1647*58b9f456SAndroid Build Coastguard Worker iterator __i = __base::begin(); 1648*58b9f456SAndroid Build Coastguard Worker iterator __e = __base::end(); 1649*58b9f456SAndroid Build Coastguard Worker for (; __f != __l && __i != __e; ++__f, (void) ++__i) 1650*58b9f456SAndroid Build Coastguard Worker *__i = *__f; 1651*58b9f456SAndroid Build Coastguard Worker if (__f != __l) 1652*58b9f456SAndroid Build Coastguard Worker __append(__f, __l); 1653*58b9f456SAndroid Build Coastguard Worker else 1654*58b9f456SAndroid Build Coastguard Worker __erase_to_end(__i); 1655*58b9f456SAndroid Build Coastguard Worker} 1656*58b9f456SAndroid Build Coastguard Worker 1657*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1658*58b9f456SAndroid Build Coastguard Workertemplate <class _RAIter> 1659*58b9f456SAndroid Build Coastguard Workervoid 1660*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::assign(_RAIter __f, _RAIter __l, 1661*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_random_access_iterator<_RAIter>::value>::type*) 1662*58b9f456SAndroid Build Coastguard Worker{ 1663*58b9f456SAndroid Build Coastguard Worker if (static_cast<size_type>(__l - __f) > __base::size()) 1664*58b9f456SAndroid Build Coastguard Worker { 1665*58b9f456SAndroid Build Coastguard Worker _RAIter __m = __f + __base::size(); 1666*58b9f456SAndroid Build Coastguard Worker _VSTD::copy(__f, __m, __base::begin()); 1667*58b9f456SAndroid Build Coastguard Worker __append(__m, __l); 1668*58b9f456SAndroid Build Coastguard Worker } 1669*58b9f456SAndroid Build Coastguard Worker else 1670*58b9f456SAndroid Build Coastguard Worker __erase_to_end(_VSTD::copy(__f, __l, __base::begin())); 1671*58b9f456SAndroid Build Coastguard Worker} 1672*58b9f456SAndroid Build Coastguard Worker 1673*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1674*58b9f456SAndroid Build Coastguard Workervoid 1675*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::assign(size_type __n, const value_type& __v) 1676*58b9f456SAndroid Build Coastguard Worker{ 1677*58b9f456SAndroid Build Coastguard Worker if (__n > __base::size()) 1678*58b9f456SAndroid Build Coastguard Worker { 1679*58b9f456SAndroid Build Coastguard Worker _VSTD::fill_n(__base::begin(), __base::size(), __v); 1680*58b9f456SAndroid Build Coastguard Worker __n -= __base::size(); 1681*58b9f456SAndroid Build Coastguard Worker __append(__n, __v); 1682*58b9f456SAndroid Build Coastguard Worker } 1683*58b9f456SAndroid Build Coastguard Worker else 1684*58b9f456SAndroid Build Coastguard Worker __erase_to_end(_VSTD::fill_n(__base::begin(), __n, __v)); 1685*58b9f456SAndroid Build Coastguard Worker} 1686*58b9f456SAndroid Build Coastguard Worker 1687*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1688*58b9f456SAndroid Build Coastguard Workerinline 1689*58b9f456SAndroid Build Coastguard Worker_Allocator 1690*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::get_allocator() const _NOEXCEPT 1691*58b9f456SAndroid Build Coastguard Worker{ 1692*58b9f456SAndroid Build Coastguard Worker return __base::__alloc(); 1693*58b9f456SAndroid Build Coastguard Worker} 1694*58b9f456SAndroid Build Coastguard Worker 1695*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1696*58b9f456SAndroid Build Coastguard Workervoid 1697*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::resize(size_type __n) 1698*58b9f456SAndroid Build Coastguard Worker{ 1699*58b9f456SAndroid Build Coastguard Worker if (__n > __base::size()) 1700*58b9f456SAndroid Build Coastguard Worker __append(__n - __base::size()); 1701*58b9f456SAndroid Build Coastguard Worker else if (__n < __base::size()) 1702*58b9f456SAndroid Build Coastguard Worker __erase_to_end(__base::begin() + __n); 1703*58b9f456SAndroid Build Coastguard Worker} 1704*58b9f456SAndroid Build Coastguard Worker 1705*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1706*58b9f456SAndroid Build Coastguard Workervoid 1707*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::resize(size_type __n, const value_type& __v) 1708*58b9f456SAndroid Build Coastguard Worker{ 1709*58b9f456SAndroid Build Coastguard Worker if (__n > __base::size()) 1710*58b9f456SAndroid Build Coastguard Worker __append(__n - __base::size(), __v); 1711*58b9f456SAndroid Build Coastguard Worker else if (__n < __base::size()) 1712*58b9f456SAndroid Build Coastguard Worker __erase_to_end(__base::begin() + __n); 1713*58b9f456SAndroid Build Coastguard Worker} 1714*58b9f456SAndroid Build Coastguard Worker 1715*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1716*58b9f456SAndroid Build Coastguard Workervoid 1717*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::shrink_to_fit() _NOEXCEPT 1718*58b9f456SAndroid Build Coastguard Worker{ 1719*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1720*58b9f456SAndroid Build Coastguard Worker if (empty()) 1721*58b9f456SAndroid Build Coastguard Worker { 1722*58b9f456SAndroid Build Coastguard Worker while (__base::__map_.size() > 0) 1723*58b9f456SAndroid Build Coastguard Worker { 1724*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size); 1725*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 1726*58b9f456SAndroid Build Coastguard Worker } 1727*58b9f456SAndroid Build Coastguard Worker __base::__start_ = 0; 1728*58b9f456SAndroid Build Coastguard Worker } 1729*58b9f456SAndroid Build Coastguard Worker else 1730*58b9f456SAndroid Build Coastguard Worker { 1731*58b9f456SAndroid Build Coastguard Worker if (__front_spare() >= __base::__block_size) 1732*58b9f456SAndroid Build Coastguard Worker { 1733*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size); 1734*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 1735*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size; 1736*58b9f456SAndroid Build Coastguard Worker } 1737*58b9f456SAndroid Build Coastguard Worker if (__back_spare() >= __base::__block_size) 1738*58b9f456SAndroid Build Coastguard Worker { 1739*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size); 1740*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 1741*58b9f456SAndroid Build Coastguard Worker } 1742*58b9f456SAndroid Build Coastguard Worker } 1743*58b9f456SAndroid Build Coastguard Worker __base::__map_.shrink_to_fit(); 1744*58b9f456SAndroid Build Coastguard Worker} 1745*58b9f456SAndroid Build Coastguard Worker 1746*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1747*58b9f456SAndroid Build Coastguard Workerinline 1748*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::reference 1749*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::operator[](size_type __i) 1750*58b9f456SAndroid Build Coastguard Worker{ 1751*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::__start_ + __i; 1752*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size); 1753*58b9f456SAndroid Build Coastguard Worker} 1754*58b9f456SAndroid Build Coastguard Worker 1755*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1756*58b9f456SAndroid Build Coastguard Workerinline 1757*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::const_reference 1758*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::operator[](size_type __i) const 1759*58b9f456SAndroid Build Coastguard Worker{ 1760*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::__start_ + __i; 1761*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size); 1762*58b9f456SAndroid Build Coastguard Worker} 1763*58b9f456SAndroid Build Coastguard Worker 1764*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1765*58b9f456SAndroid Build Coastguard Workerinline 1766*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::reference 1767*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::at(size_type __i) 1768*58b9f456SAndroid Build Coastguard Worker{ 1769*58b9f456SAndroid Build Coastguard Worker if (__i >= __base::size()) 1770*58b9f456SAndroid Build Coastguard Worker __base::__throw_out_of_range(); 1771*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::__start_ + __i; 1772*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size); 1773*58b9f456SAndroid Build Coastguard Worker} 1774*58b9f456SAndroid Build Coastguard Worker 1775*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1776*58b9f456SAndroid Build Coastguard Workerinline 1777*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::const_reference 1778*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::at(size_type __i) const 1779*58b9f456SAndroid Build Coastguard Worker{ 1780*58b9f456SAndroid Build Coastguard Worker if (__i >= __base::size()) 1781*58b9f456SAndroid Build Coastguard Worker __base::__throw_out_of_range(); 1782*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::__start_ + __i; 1783*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size); 1784*58b9f456SAndroid Build Coastguard Worker} 1785*58b9f456SAndroid Build Coastguard Worker 1786*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1787*58b9f456SAndroid Build Coastguard Workerinline 1788*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::reference 1789*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::front() 1790*58b9f456SAndroid Build Coastguard Worker{ 1791*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __base::__start_ / __base::__block_size) 1792*58b9f456SAndroid Build Coastguard Worker + __base::__start_ % __base::__block_size); 1793*58b9f456SAndroid Build Coastguard Worker} 1794*58b9f456SAndroid Build Coastguard Worker 1795*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1796*58b9f456SAndroid Build Coastguard Workerinline 1797*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::const_reference 1798*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::front() const 1799*58b9f456SAndroid Build Coastguard Worker{ 1800*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __base::__start_ / __base::__block_size) 1801*58b9f456SAndroid Build Coastguard Worker + __base::__start_ % __base::__block_size); 1802*58b9f456SAndroid Build Coastguard Worker} 1803*58b9f456SAndroid Build Coastguard Worker 1804*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1805*58b9f456SAndroid Build Coastguard Workerinline 1806*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::reference 1807*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::back() 1808*58b9f456SAndroid Build Coastguard Worker{ 1809*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::size() + __base::__start_ - 1; 1810*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size); 1811*58b9f456SAndroid Build Coastguard Worker} 1812*58b9f456SAndroid Build Coastguard Worker 1813*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1814*58b9f456SAndroid Build Coastguard Workerinline 1815*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::const_reference 1816*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::back() const 1817*58b9f456SAndroid Build Coastguard Worker{ 1818*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::size() + __base::__start_ - 1; 1819*58b9f456SAndroid Build Coastguard Worker return *(*(__base::__map_.begin() + __p / __base::__block_size) + __p % __base::__block_size); 1820*58b9f456SAndroid Build Coastguard Worker} 1821*58b9f456SAndroid Build Coastguard Worker 1822*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1823*58b9f456SAndroid Build Coastguard Workervoid 1824*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::push_back(const value_type& __v) 1825*58b9f456SAndroid Build Coastguard Worker{ 1826*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1827*58b9f456SAndroid Build Coastguard Worker if (__back_spare() == 0) 1828*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(); 1829*58b9f456SAndroid Build Coastguard Worker // __back_spare() >= 1 1830*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), __v); 1831*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1832*58b9f456SAndroid Build Coastguard Worker} 1833*58b9f456SAndroid Build Coastguard Worker 1834*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1835*58b9f456SAndroid Build Coastguard Workervoid 1836*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::push_front(const value_type& __v) 1837*58b9f456SAndroid Build Coastguard Worker{ 1838*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1839*58b9f456SAndroid Build Coastguard Worker if (__front_spare() == 0) 1840*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(); 1841*58b9f456SAndroid Build Coastguard Worker // __front_spare() >= 1 1842*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), __v); 1843*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1844*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1845*58b9f456SAndroid Build Coastguard Worker} 1846*58b9f456SAndroid Build Coastguard Worker 1847*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_CXX03_LANG 1848*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1849*58b9f456SAndroid Build Coastguard Workervoid 1850*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::push_back(value_type&& __v) 1851*58b9f456SAndroid Build Coastguard Worker{ 1852*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1853*58b9f456SAndroid Build Coastguard Worker if (__back_spare() == 0) 1854*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(); 1855*58b9f456SAndroid Build Coastguard Worker // __back_spare() >= 1 1856*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::move(__v)); 1857*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1858*58b9f456SAndroid Build Coastguard Worker} 1859*58b9f456SAndroid Build Coastguard Worker 1860*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1861*58b9f456SAndroid Build Coastguard Workertemplate <class... _Args> 1862*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14 1863*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::reference 1864*58b9f456SAndroid Build Coastguard Worker#else 1865*58b9f456SAndroid Build Coastguard Workervoid 1866*58b9f456SAndroid Build Coastguard Worker#endif 1867*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::emplace_back(_Args&&... __args) 1868*58b9f456SAndroid Build Coastguard Worker{ 1869*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1870*58b9f456SAndroid Build Coastguard Worker if (__back_spare() == 0) 1871*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(); 1872*58b9f456SAndroid Build Coastguard Worker // __back_spare() >= 1 1873*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), 1874*58b9f456SAndroid Build Coastguard Worker _VSTD::forward<_Args>(__args)...); 1875*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1876*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14 1877*58b9f456SAndroid Build Coastguard Worker return *--__base::end(); 1878*58b9f456SAndroid Build Coastguard Worker#endif 1879*58b9f456SAndroid Build Coastguard Worker} 1880*58b9f456SAndroid Build Coastguard Worker 1881*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1882*58b9f456SAndroid Build Coastguard Workervoid 1883*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::push_front(value_type&& __v) 1884*58b9f456SAndroid Build Coastguard Worker{ 1885*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1886*58b9f456SAndroid Build Coastguard Worker if (__front_spare() == 0) 1887*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(); 1888*58b9f456SAndroid Build Coastguard Worker // __front_spare() >= 1 1889*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::move(__v)); 1890*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1891*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1892*58b9f456SAndroid Build Coastguard Worker} 1893*58b9f456SAndroid Build Coastguard Worker 1894*58b9f456SAndroid Build Coastguard Worker 1895*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1896*58b9f456SAndroid Build Coastguard Workertemplate <class... _Args> 1897*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14 1898*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::reference 1899*58b9f456SAndroid Build Coastguard Worker#else 1900*58b9f456SAndroid Build Coastguard Workervoid 1901*58b9f456SAndroid Build Coastguard Worker#endif 1902*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::emplace_front(_Args&&... __args) 1903*58b9f456SAndroid Build Coastguard Worker{ 1904*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1905*58b9f456SAndroid Build Coastguard Worker if (__front_spare() == 0) 1906*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(); 1907*58b9f456SAndroid Build Coastguard Worker // __front_spare() >= 1 1908*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...); 1909*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1910*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1911*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 14 1912*58b9f456SAndroid Build Coastguard Worker return *__base::begin(); 1913*58b9f456SAndroid Build Coastguard Worker#endif 1914*58b9f456SAndroid Build Coastguard Worker} 1915*58b9f456SAndroid Build Coastguard Worker 1916*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1917*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 1918*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::insert(const_iterator __p, value_type&& __v) 1919*58b9f456SAndroid Build Coastguard Worker{ 1920*58b9f456SAndroid Build Coastguard Worker size_type __pos = __p - __base::begin(); 1921*58b9f456SAndroid Build Coastguard Worker size_type __to_end = __base::size() - __pos; 1922*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1923*58b9f456SAndroid Build Coastguard Worker if (__pos < __to_end) 1924*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things backward 1925*58b9f456SAndroid Build Coastguard Worker if (__front_spare() == 0) 1926*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(); 1927*58b9f456SAndroid Build Coastguard Worker // __front_spare() >= 1 1928*58b9f456SAndroid Build Coastguard Worker if (__pos == 0) 1929*58b9f456SAndroid Build Coastguard Worker { 1930*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::move(__v)); 1931*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1932*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1933*58b9f456SAndroid Build Coastguard Worker } 1934*58b9f456SAndroid Build Coastguard Worker else 1935*58b9f456SAndroid Build Coastguard Worker { 1936*58b9f456SAndroid Build Coastguard Worker iterator __b = __base::begin(); 1937*58b9f456SAndroid Build Coastguard Worker iterator __bm1 = _VSTD::prev(__b); 1938*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__bm1), _VSTD::move(*__b)); 1939*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1940*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1941*58b9f456SAndroid Build Coastguard Worker if (__pos > 1) 1942*58b9f456SAndroid Build Coastguard Worker __b = _VSTD::move(_VSTD::next(__b), __b + __pos, __b); 1943*58b9f456SAndroid Build Coastguard Worker *__b = _VSTD::move(__v); 1944*58b9f456SAndroid Build Coastguard Worker } 1945*58b9f456SAndroid Build Coastguard Worker } 1946*58b9f456SAndroid Build Coastguard Worker else 1947*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things forward 1948*58b9f456SAndroid Build Coastguard Worker if (__back_spare() == 0) 1949*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(); 1950*58b9f456SAndroid Build Coastguard Worker // __back_capacity >= 1 1951*58b9f456SAndroid Build Coastguard Worker size_type __de = __base::size() - __pos; 1952*58b9f456SAndroid Build Coastguard Worker if (__de == 0) 1953*58b9f456SAndroid Build Coastguard Worker { 1954*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::move(__v)); 1955*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1956*58b9f456SAndroid Build Coastguard Worker } 1957*58b9f456SAndroid Build Coastguard Worker else 1958*58b9f456SAndroid Build Coastguard Worker { 1959*58b9f456SAndroid Build Coastguard Worker iterator __e = __base::end(); 1960*58b9f456SAndroid Build Coastguard Worker iterator __em1 = _VSTD::prev(__e); 1961*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__e), _VSTD::move(*__em1)); 1962*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1963*58b9f456SAndroid Build Coastguard Worker if (__de > 1) 1964*58b9f456SAndroid Build Coastguard Worker __e = _VSTD::move_backward(__e - __de, __em1, __e); 1965*58b9f456SAndroid Build Coastguard Worker *--__e = _VSTD::move(__v); 1966*58b9f456SAndroid Build Coastguard Worker } 1967*58b9f456SAndroid Build Coastguard Worker } 1968*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 1969*58b9f456SAndroid Build Coastguard Worker} 1970*58b9f456SAndroid Build Coastguard Worker 1971*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 1972*58b9f456SAndroid Build Coastguard Workertemplate <class... _Args> 1973*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 1974*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::emplace(const_iterator __p, _Args&&... __args) 1975*58b9f456SAndroid Build Coastguard Worker{ 1976*58b9f456SAndroid Build Coastguard Worker size_type __pos = __p - __base::begin(); 1977*58b9f456SAndroid Build Coastguard Worker size_type __to_end = __base::size() - __pos; 1978*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 1979*58b9f456SAndroid Build Coastguard Worker if (__pos < __to_end) 1980*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things backward 1981*58b9f456SAndroid Build Coastguard Worker if (__front_spare() == 0) 1982*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(); 1983*58b9f456SAndroid Build Coastguard Worker // __front_spare() >= 1 1984*58b9f456SAndroid Build Coastguard Worker if (__pos == 0) 1985*58b9f456SAndroid Build Coastguard Worker { 1986*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), _VSTD::forward<_Args>(__args)...); 1987*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1988*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1989*58b9f456SAndroid Build Coastguard Worker } 1990*58b9f456SAndroid Build Coastguard Worker else 1991*58b9f456SAndroid Build Coastguard Worker { 1992*58b9f456SAndroid Build Coastguard Worker __temp_value<value_type, _Allocator> __tmp(this->__alloc(), _VSTD::forward<_Args>(__args)...); 1993*58b9f456SAndroid Build Coastguard Worker iterator __b = __base::begin(); 1994*58b9f456SAndroid Build Coastguard Worker iterator __bm1 = _VSTD::prev(__b); 1995*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__bm1), _VSTD::move(*__b)); 1996*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 1997*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 1998*58b9f456SAndroid Build Coastguard Worker if (__pos > 1) 1999*58b9f456SAndroid Build Coastguard Worker __b = _VSTD::move(_VSTD::next(__b), __b + __pos, __b); 2000*58b9f456SAndroid Build Coastguard Worker *__b = _VSTD::move(__tmp.get()); 2001*58b9f456SAndroid Build Coastguard Worker } 2002*58b9f456SAndroid Build Coastguard Worker } 2003*58b9f456SAndroid Build Coastguard Worker else 2004*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things forward 2005*58b9f456SAndroid Build Coastguard Worker if (__back_spare() == 0) 2006*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(); 2007*58b9f456SAndroid Build Coastguard Worker // __back_capacity >= 1 2008*58b9f456SAndroid Build Coastguard Worker size_type __de = __base::size() - __pos; 2009*58b9f456SAndroid Build Coastguard Worker if (__de == 0) 2010*58b9f456SAndroid Build Coastguard Worker { 2011*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), _VSTD::forward<_Args>(__args)...); 2012*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2013*58b9f456SAndroid Build Coastguard Worker } 2014*58b9f456SAndroid Build Coastguard Worker else 2015*58b9f456SAndroid Build Coastguard Worker { 2016*58b9f456SAndroid Build Coastguard Worker __temp_value<value_type, _Allocator> __tmp(this->__alloc(), _VSTD::forward<_Args>(__args)...); 2017*58b9f456SAndroid Build Coastguard Worker iterator __e = __base::end(); 2018*58b9f456SAndroid Build Coastguard Worker iterator __em1 = _VSTD::prev(__e); 2019*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__e), _VSTD::move(*__em1)); 2020*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2021*58b9f456SAndroid Build Coastguard Worker if (__de > 1) 2022*58b9f456SAndroid Build Coastguard Worker __e = _VSTD::move_backward(__e - __de, __em1, __e); 2023*58b9f456SAndroid Build Coastguard Worker *--__e = _VSTD::move(__tmp.get()); 2024*58b9f456SAndroid Build Coastguard Worker } 2025*58b9f456SAndroid Build Coastguard Worker } 2026*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 2027*58b9f456SAndroid Build Coastguard Worker} 2028*58b9f456SAndroid Build Coastguard Worker 2029*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_CXX03_LANG 2030*58b9f456SAndroid Build Coastguard Worker 2031*58b9f456SAndroid Build Coastguard Worker 2032*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2033*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2034*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::insert(const_iterator __p, const value_type& __v) 2035*58b9f456SAndroid Build Coastguard Worker{ 2036*58b9f456SAndroid Build Coastguard Worker size_type __pos = __p - __base::begin(); 2037*58b9f456SAndroid Build Coastguard Worker size_type __to_end = __base::size() - __pos; 2038*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2039*58b9f456SAndroid Build Coastguard Worker if (__pos < __to_end) 2040*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things backward 2041*58b9f456SAndroid Build Coastguard Worker if (__front_spare() == 0) 2042*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(); 2043*58b9f456SAndroid Build Coastguard Worker // __front_spare() >= 1 2044*58b9f456SAndroid Build Coastguard Worker if (__pos == 0) 2045*58b9f456SAndroid Build Coastguard Worker { 2046*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__base::begin()), __v); 2047*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 2048*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2049*58b9f456SAndroid Build Coastguard Worker } 2050*58b9f456SAndroid Build Coastguard Worker else 2051*58b9f456SAndroid Build Coastguard Worker { 2052*58b9f456SAndroid Build Coastguard Worker const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v); 2053*58b9f456SAndroid Build Coastguard Worker iterator __b = __base::begin(); 2054*58b9f456SAndroid Build Coastguard Worker iterator __bm1 = _VSTD::prev(__b); 2055*58b9f456SAndroid Build Coastguard Worker if (__vt == pointer_traits<const_pointer>::pointer_to(*__b)) 2056*58b9f456SAndroid Build Coastguard Worker __vt = pointer_traits<const_pointer>::pointer_to(*__bm1); 2057*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__bm1), _VSTD::move(*__b)); 2058*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 2059*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2060*58b9f456SAndroid Build Coastguard Worker if (__pos > 1) 2061*58b9f456SAndroid Build Coastguard Worker __b = __move_and_check(_VSTD::next(__b), __b + __pos, __b, __vt); 2062*58b9f456SAndroid Build Coastguard Worker *__b = *__vt; 2063*58b9f456SAndroid Build Coastguard Worker } 2064*58b9f456SAndroid Build Coastguard Worker } 2065*58b9f456SAndroid Build Coastguard Worker else 2066*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things forward 2067*58b9f456SAndroid Build Coastguard Worker if (__back_spare() == 0) 2068*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(); 2069*58b9f456SAndroid Build Coastguard Worker // __back_capacity >= 1 2070*58b9f456SAndroid Build Coastguard Worker size_type __de = __base::size() - __pos; 2071*58b9f456SAndroid Build Coastguard Worker if (__de == 0) 2072*58b9f456SAndroid Build Coastguard Worker { 2073*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__base::end()), __v); 2074*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2075*58b9f456SAndroid Build Coastguard Worker } 2076*58b9f456SAndroid Build Coastguard Worker else 2077*58b9f456SAndroid Build Coastguard Worker { 2078*58b9f456SAndroid Build Coastguard Worker const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v); 2079*58b9f456SAndroid Build Coastguard Worker iterator __e = __base::end(); 2080*58b9f456SAndroid Build Coastguard Worker iterator __em1 = _VSTD::prev(__e); 2081*58b9f456SAndroid Build Coastguard Worker if (__vt == pointer_traits<const_pointer>::pointer_to(*__em1)) 2082*58b9f456SAndroid Build Coastguard Worker __vt = pointer_traits<const_pointer>::pointer_to(*__e); 2083*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__e), _VSTD::move(*__em1)); 2084*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2085*58b9f456SAndroid Build Coastguard Worker if (__de > 1) 2086*58b9f456SAndroid Build Coastguard Worker __e = __move_backward_and_check(__e - __de, __em1, __e, __vt); 2087*58b9f456SAndroid Build Coastguard Worker *--__e = *__vt; 2088*58b9f456SAndroid Build Coastguard Worker } 2089*58b9f456SAndroid Build Coastguard Worker } 2090*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 2091*58b9f456SAndroid Build Coastguard Worker} 2092*58b9f456SAndroid Build Coastguard Worker 2093*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2094*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2095*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::insert(const_iterator __p, size_type __n, const value_type& __v) 2096*58b9f456SAndroid Build Coastguard Worker{ 2097*58b9f456SAndroid Build Coastguard Worker size_type __pos = __p - __base::begin(); 2098*58b9f456SAndroid Build Coastguard Worker size_type __to_end = __base::size() - __pos; 2099*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2100*58b9f456SAndroid Build Coastguard Worker if (__pos < __to_end) 2101*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things backward 2102*58b9f456SAndroid Build Coastguard Worker if (__n > __front_spare()) 2103*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(__n - __front_spare()); 2104*58b9f456SAndroid Build Coastguard Worker // __n <= __front_spare() 2105*58b9f456SAndroid Build Coastguard Worker iterator __old_begin = __base::begin(); 2106*58b9f456SAndroid Build Coastguard Worker iterator __i = __old_begin; 2107*58b9f456SAndroid Build Coastguard Worker if (__n > __pos) 2108*58b9f456SAndroid Build Coastguard Worker { 2109*58b9f456SAndroid Build Coastguard Worker for (size_type __m = __n - __pos; __m; --__m, --__base::__start_, ++__base::size()) 2110*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__i), __v); 2111*58b9f456SAndroid Build Coastguard Worker __n = __pos; 2112*58b9f456SAndroid Build Coastguard Worker } 2113*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 2114*58b9f456SAndroid Build Coastguard Worker { 2115*58b9f456SAndroid Build Coastguard Worker const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v); 2116*58b9f456SAndroid Build Coastguard Worker iterator __obn = __old_begin + __n; 2117*58b9f456SAndroid Build Coastguard Worker __move_construct_backward_and_check(__old_begin, __obn, __i, __vt); 2118*58b9f456SAndroid Build Coastguard Worker if (__n < __pos) 2119*58b9f456SAndroid Build Coastguard Worker __old_begin = __move_and_check(__obn, __old_begin + __pos, __old_begin, __vt); 2120*58b9f456SAndroid Build Coastguard Worker _VSTD::fill_n(__old_begin, __n, *__vt); 2121*58b9f456SAndroid Build Coastguard Worker } 2122*58b9f456SAndroid Build Coastguard Worker } 2123*58b9f456SAndroid Build Coastguard Worker else 2124*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things forward 2125*58b9f456SAndroid Build Coastguard Worker size_type __back_capacity = __back_spare(); 2126*58b9f456SAndroid Build Coastguard Worker if (__n > __back_capacity) 2127*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(__n - __back_capacity); 2128*58b9f456SAndroid Build Coastguard Worker // __n <= __back_capacity 2129*58b9f456SAndroid Build Coastguard Worker iterator __old_end = __base::end(); 2130*58b9f456SAndroid Build Coastguard Worker iterator __i = __old_end; 2131*58b9f456SAndroid Build Coastguard Worker size_type __de = __base::size() - __pos; 2132*58b9f456SAndroid Build Coastguard Worker if (__n > __de) 2133*58b9f456SAndroid Build Coastguard Worker { 2134*58b9f456SAndroid Build Coastguard Worker for (size_type __m = __n - __de; __m; --__m, ++__i, ++__base::size()) 2135*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__i), __v); 2136*58b9f456SAndroid Build Coastguard Worker __n = __de; 2137*58b9f456SAndroid Build Coastguard Worker } 2138*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 2139*58b9f456SAndroid Build Coastguard Worker { 2140*58b9f456SAndroid Build Coastguard Worker const_pointer __vt = pointer_traits<const_pointer>::pointer_to(__v); 2141*58b9f456SAndroid Build Coastguard Worker iterator __oen = __old_end - __n; 2142*58b9f456SAndroid Build Coastguard Worker __move_construct_and_check(__oen, __old_end, __i, __vt); 2143*58b9f456SAndroid Build Coastguard Worker if (__n < __de) 2144*58b9f456SAndroid Build Coastguard Worker __old_end = __move_backward_and_check(__old_end - __de, __oen, __old_end, __vt); 2145*58b9f456SAndroid Build Coastguard Worker _VSTD::fill_n(__old_end - __n, __n, *__vt); 2146*58b9f456SAndroid Build Coastguard Worker } 2147*58b9f456SAndroid Build Coastguard Worker } 2148*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 2149*58b9f456SAndroid Build Coastguard Worker} 2150*58b9f456SAndroid Build Coastguard Worker 2151*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2152*58b9f456SAndroid Build Coastguard Workertemplate <class _InputIter> 2153*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2154*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::insert(const_iterator __p, _InputIter __f, _InputIter __l, 2155*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InputIter>::value 2156*58b9f456SAndroid Build Coastguard Worker &&!__is_forward_iterator<_InputIter>::value>::type*) 2157*58b9f456SAndroid Build Coastguard Worker{ 2158*58b9f456SAndroid Build Coastguard Worker __split_buffer<value_type, allocator_type&> __buf(__base::__alloc()); 2159*58b9f456SAndroid Build Coastguard Worker __buf.__construct_at_end(__f, __l); 2160*58b9f456SAndroid Build Coastguard Worker typedef typename __split_buffer<value_type, allocator_type&>::iterator __bi; 2161*58b9f456SAndroid Build Coastguard Worker return insert(__p, move_iterator<__bi>(__buf.begin()), move_iterator<__bi>(__buf.end())); 2162*58b9f456SAndroid Build Coastguard Worker} 2163*58b9f456SAndroid Build Coastguard Worker 2164*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2165*58b9f456SAndroid Build Coastguard Workertemplate <class _ForwardIterator> 2166*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2167*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::insert(const_iterator __p, _ForwardIterator __f, _ForwardIterator __l, 2168*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_forward_iterator<_ForwardIterator>::value 2169*58b9f456SAndroid Build Coastguard Worker &&!__is_bidirectional_iterator<_ForwardIterator>::value>::type*) 2170*58b9f456SAndroid Build Coastguard Worker{ 2171*58b9f456SAndroid Build Coastguard Worker size_type __n = _VSTD::distance(__f, __l); 2172*58b9f456SAndroid Build Coastguard Worker __split_buffer<value_type, allocator_type&> __buf(__n, 0, __base::__alloc()); 2173*58b9f456SAndroid Build Coastguard Worker __buf.__construct_at_end(__f, __l); 2174*58b9f456SAndroid Build Coastguard Worker typedef typename __split_buffer<value_type, allocator_type&>::iterator __fwd; 2175*58b9f456SAndroid Build Coastguard Worker return insert(__p, move_iterator<__fwd>(__buf.begin()), move_iterator<__fwd>(__buf.end())); 2176*58b9f456SAndroid Build Coastguard Worker} 2177*58b9f456SAndroid Build Coastguard Worker 2178*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2179*58b9f456SAndroid Build Coastguard Workertemplate <class _BiIter> 2180*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2181*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::insert(const_iterator __p, _BiIter __f, _BiIter __l, 2182*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_bidirectional_iterator<_BiIter>::value>::type*) 2183*58b9f456SAndroid Build Coastguard Worker{ 2184*58b9f456SAndroid Build Coastguard Worker size_type __n = _VSTD::distance(__f, __l); 2185*58b9f456SAndroid Build Coastguard Worker size_type __pos = __p - __base::begin(); 2186*58b9f456SAndroid Build Coastguard Worker size_type __to_end = __base::size() - __pos; 2187*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2188*58b9f456SAndroid Build Coastguard Worker if (__pos < __to_end) 2189*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things backward 2190*58b9f456SAndroid Build Coastguard Worker if (__n > __front_spare()) 2191*58b9f456SAndroid Build Coastguard Worker __add_front_capacity(__n - __front_spare()); 2192*58b9f456SAndroid Build Coastguard Worker // __n <= __front_spare() 2193*58b9f456SAndroid Build Coastguard Worker iterator __old_begin = __base::begin(); 2194*58b9f456SAndroid Build Coastguard Worker iterator __i = __old_begin; 2195*58b9f456SAndroid Build Coastguard Worker _BiIter __m = __f; 2196*58b9f456SAndroid Build Coastguard Worker if (__n > __pos) 2197*58b9f456SAndroid Build Coastguard Worker { 2198*58b9f456SAndroid Build Coastguard Worker __m = __pos < __n / 2 ? _VSTD::prev(__l, __pos) : _VSTD::next(__f, __n - __pos); 2199*58b9f456SAndroid Build Coastguard Worker for (_BiIter __j = __m; __j != __f; --__base::__start_, ++__base::size()) 2200*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__i), *--__j); 2201*58b9f456SAndroid Build Coastguard Worker __n = __pos; 2202*58b9f456SAndroid Build Coastguard Worker } 2203*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 2204*58b9f456SAndroid Build Coastguard Worker { 2205*58b9f456SAndroid Build Coastguard Worker iterator __obn = __old_begin + __n; 2206*58b9f456SAndroid Build Coastguard Worker for (iterator __j = __obn; __j != __old_begin;) 2207*58b9f456SAndroid Build Coastguard Worker { 2208*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__i), _VSTD::move(*--__j)); 2209*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 2210*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2211*58b9f456SAndroid Build Coastguard Worker } 2212*58b9f456SAndroid Build Coastguard Worker if (__n < __pos) 2213*58b9f456SAndroid Build Coastguard Worker __old_begin = _VSTD::move(__obn, __old_begin + __pos, __old_begin); 2214*58b9f456SAndroid Build Coastguard Worker _VSTD::copy(__m, __l, __old_begin); 2215*58b9f456SAndroid Build Coastguard Worker } 2216*58b9f456SAndroid Build Coastguard Worker } 2217*58b9f456SAndroid Build Coastguard Worker else 2218*58b9f456SAndroid Build Coastguard Worker { // insert by shifting things forward 2219*58b9f456SAndroid Build Coastguard Worker size_type __back_capacity = __back_spare(); 2220*58b9f456SAndroid Build Coastguard Worker if (__n > __back_capacity) 2221*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(__n - __back_capacity); 2222*58b9f456SAndroid Build Coastguard Worker // __n <= __back_capacity 2223*58b9f456SAndroid Build Coastguard Worker iterator __old_end = __base::end(); 2224*58b9f456SAndroid Build Coastguard Worker iterator __i = __old_end; 2225*58b9f456SAndroid Build Coastguard Worker _BiIter __m = __l; 2226*58b9f456SAndroid Build Coastguard Worker size_type __de = __base::size() - __pos; 2227*58b9f456SAndroid Build Coastguard Worker if (__n > __de) 2228*58b9f456SAndroid Build Coastguard Worker { 2229*58b9f456SAndroid Build Coastguard Worker __m = __de < __n / 2 ? _VSTD::next(__f, __de) : _VSTD::prev(__l, __n - __de); 2230*58b9f456SAndroid Build Coastguard Worker for (_BiIter __j = __m; __j != __l; ++__i, (void) ++__j, ++__base::size()) 2231*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__i), *__j); 2232*58b9f456SAndroid Build Coastguard Worker __n = __de; 2233*58b9f456SAndroid Build Coastguard Worker } 2234*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 2235*58b9f456SAndroid Build Coastguard Worker { 2236*58b9f456SAndroid Build Coastguard Worker iterator __oen = __old_end - __n; 2237*58b9f456SAndroid Build Coastguard Worker for (iterator __j = __oen; __j != __old_end; ++__i, ++__j, ++__base::size()) 2238*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__i), _VSTD::move(*__j)); 2239*58b9f456SAndroid Build Coastguard Worker if (__n < __de) 2240*58b9f456SAndroid Build Coastguard Worker __old_end = _VSTD::move_backward(__old_end - __de, __oen, __old_end); 2241*58b9f456SAndroid Build Coastguard Worker _VSTD::copy_backward(__f, __m, __old_end); 2242*58b9f456SAndroid Build Coastguard Worker } 2243*58b9f456SAndroid Build Coastguard Worker } 2244*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 2245*58b9f456SAndroid Build Coastguard Worker} 2246*58b9f456SAndroid Build Coastguard Worker 2247*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2248*58b9f456SAndroid Build Coastguard Workertemplate <class _InpIter> 2249*58b9f456SAndroid Build Coastguard Workervoid 2250*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__append(_InpIter __f, _InpIter __l, 2251*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_input_iterator<_InpIter>::value && 2252*58b9f456SAndroid Build Coastguard Worker !__is_forward_iterator<_InpIter>::value>::type*) 2253*58b9f456SAndroid Build Coastguard Worker{ 2254*58b9f456SAndroid Build Coastguard Worker for (; __f != __l; ++__f) 2255*58b9f456SAndroid Build Coastguard Worker#ifdef _LIBCPP_CXX03_LANG 2256*58b9f456SAndroid Build Coastguard Worker push_back(*__f); 2257*58b9f456SAndroid Build Coastguard Worker#else 2258*58b9f456SAndroid Build Coastguard Worker emplace_back(*__f); 2259*58b9f456SAndroid Build Coastguard Worker#endif 2260*58b9f456SAndroid Build Coastguard Worker} 2261*58b9f456SAndroid Build Coastguard Worker 2262*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2263*58b9f456SAndroid Build Coastguard Workertemplate <class _ForIter> 2264*58b9f456SAndroid Build Coastguard Workervoid 2265*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__append(_ForIter __f, _ForIter __l, 2266*58b9f456SAndroid Build Coastguard Worker typename enable_if<__is_forward_iterator<_ForIter>::value>::type*) 2267*58b9f456SAndroid Build Coastguard Worker{ 2268*58b9f456SAndroid Build Coastguard Worker size_type __n = _VSTD::distance(__f, __l); 2269*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2270*58b9f456SAndroid Build Coastguard Worker size_type __back_capacity = __back_spare(); 2271*58b9f456SAndroid Build Coastguard Worker if (__n > __back_capacity) 2272*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(__n - __back_capacity); 2273*58b9f456SAndroid Build Coastguard Worker // __n <= __back_capacity 2274*58b9f456SAndroid Build Coastguard Worker for (iterator __i = __base::end(); __f != __l; ++__i, (void) ++__f, ++__base::size()) 2275*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__i), *__f); 2276*58b9f456SAndroid Build Coastguard Worker} 2277*58b9f456SAndroid Build Coastguard Worker 2278*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2279*58b9f456SAndroid Build Coastguard Workervoid 2280*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__append(size_type __n) 2281*58b9f456SAndroid Build Coastguard Worker{ 2282*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2283*58b9f456SAndroid Build Coastguard Worker size_type __back_capacity = __back_spare(); 2284*58b9f456SAndroid Build Coastguard Worker if (__n > __back_capacity) 2285*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(__n - __back_capacity); 2286*58b9f456SAndroid Build Coastguard Worker // __n <= __back_capacity 2287*58b9f456SAndroid Build Coastguard Worker for (iterator __i = __base::end(); __n; --__n, ++__i, ++__base::size()) 2288*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__i)); 2289*58b9f456SAndroid Build Coastguard Worker} 2290*58b9f456SAndroid Build Coastguard Worker 2291*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2292*58b9f456SAndroid Build Coastguard Workervoid 2293*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__append(size_type __n, const value_type& __v) 2294*58b9f456SAndroid Build Coastguard Worker{ 2295*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2296*58b9f456SAndroid Build Coastguard Worker size_type __back_capacity = __back_spare(); 2297*58b9f456SAndroid Build Coastguard Worker if (__n > __back_capacity) 2298*58b9f456SAndroid Build Coastguard Worker __add_back_capacity(__n - __back_capacity); 2299*58b9f456SAndroid Build Coastguard Worker // __n <= __back_capacity 2300*58b9f456SAndroid Build Coastguard Worker for (iterator __i = __base::end(); __n; --__n, ++__i, ++__base::size()) 2301*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__i), __v); 2302*58b9f456SAndroid Build Coastguard Worker} 2303*58b9f456SAndroid Build Coastguard Worker 2304*58b9f456SAndroid Build Coastguard Worker// Create front capacity for one block of elements. 2305*58b9f456SAndroid Build Coastguard Worker// Strong guarantee. Either do it or don't touch anything. 2306*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2307*58b9f456SAndroid Build Coastguard Workervoid 2308*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__add_front_capacity() 2309*58b9f456SAndroid Build Coastguard Worker{ 2310*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2311*58b9f456SAndroid Build Coastguard Worker if (__back_spare() >= __base::__block_size) 2312*58b9f456SAndroid Build Coastguard Worker { 2313*58b9f456SAndroid Build Coastguard Worker __base::__start_ += __base::__block_size; 2314*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.back(); 2315*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2316*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__pt); 2317*58b9f456SAndroid Build Coastguard Worker } 2318*58b9f456SAndroid Build Coastguard Worker // Else if __base::__map_.size() < __base::__map_.capacity() then we need to allocate 1 buffer 2319*58b9f456SAndroid Build Coastguard Worker else if (__base::__map_.size() < __base::__map_.capacity()) 2320*58b9f456SAndroid Build Coastguard Worker { // we can put the new buffer into the map, but don't shift things around 2321*58b9f456SAndroid Build Coastguard Worker // until all buffers are allocated. If we throw, we don't need to fix 2322*58b9f456SAndroid Build Coastguard Worker // anything up (any added buffers are undetectible) 2323*58b9f456SAndroid Build Coastguard Worker if (__base::__map_.__front_spare() > 0) 2324*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size)); 2325*58b9f456SAndroid Build Coastguard Worker else 2326*58b9f456SAndroid Build Coastguard Worker { 2327*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size)); 2328*58b9f456SAndroid Build Coastguard Worker // Done allocating, reorder capacity 2329*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.back(); 2330*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2331*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__pt); 2332*58b9f456SAndroid Build Coastguard Worker } 2333*58b9f456SAndroid Build Coastguard Worker __base::__start_ = __base::__map_.size() == 1 ? 2334*58b9f456SAndroid Build Coastguard Worker __base::__block_size / 2 : 2335*58b9f456SAndroid Build Coastguard Worker __base::__start_ + __base::__block_size; 2336*58b9f456SAndroid Build Coastguard Worker } 2337*58b9f456SAndroid Build Coastguard Worker // Else need to allocate 1 buffer, *and* we need to reallocate __map_. 2338*58b9f456SAndroid Build Coastguard Worker else 2339*58b9f456SAndroid Build Coastguard Worker { 2340*58b9f456SAndroid Build Coastguard Worker __split_buffer<pointer, typename __base::__pointer_allocator&> 2341*58b9f456SAndroid Build Coastguard Worker __buf(max<size_type>(2 * __base::__map_.capacity(), 1), 2342*58b9f456SAndroid Build Coastguard Worker 0, __base::__map_.__alloc()); 2343*58b9f456SAndroid Build Coastguard Worker 2344*58b9f456SAndroid Build Coastguard Worker typedef __allocator_destructor<_Allocator> _Dp; 2345*58b9f456SAndroid Build Coastguard Worker unique_ptr<pointer, _Dp> __hold( 2346*58b9f456SAndroid Build Coastguard Worker __alloc_traits::allocate(__a, __base::__block_size), 2347*58b9f456SAndroid Build Coastguard Worker _Dp(__a, __base::__block_size)); 2348*58b9f456SAndroid Build Coastguard Worker __buf.push_back(__hold.get()); 2349*58b9f456SAndroid Build Coastguard Worker __hold.release(); 2350*58b9f456SAndroid Build Coastguard Worker 2351*58b9f456SAndroid Build Coastguard Worker for (typename __base::__map_pointer __i = __base::__map_.begin(); 2352*58b9f456SAndroid Build Coastguard Worker __i != __base::__map_.end(); ++__i) 2353*58b9f456SAndroid Build Coastguard Worker __buf.push_back(*__i); 2354*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__first_, __buf.__first_); 2355*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__begin_, __buf.__begin_); 2356*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_, __buf.__end_); 2357*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap()); 2358*58b9f456SAndroid Build Coastguard Worker __base::__start_ = __base::__map_.size() == 1 ? 2359*58b9f456SAndroid Build Coastguard Worker __base::__block_size / 2 : 2360*58b9f456SAndroid Build Coastguard Worker __base::__start_ + __base::__block_size; 2361*58b9f456SAndroid Build Coastguard Worker } 2362*58b9f456SAndroid Build Coastguard Worker} 2363*58b9f456SAndroid Build Coastguard Worker 2364*58b9f456SAndroid Build Coastguard Worker// Create front capacity for __n elements. 2365*58b9f456SAndroid Build Coastguard Worker// Strong guarantee. Either do it or don't touch anything. 2366*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2367*58b9f456SAndroid Build Coastguard Workervoid 2368*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__add_front_capacity(size_type __n) 2369*58b9f456SAndroid Build Coastguard Worker{ 2370*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2371*58b9f456SAndroid Build Coastguard Worker size_type __nb = __recommend_blocks(__n + __base::__map_.empty()); 2372*58b9f456SAndroid Build Coastguard Worker // Number of unused blocks at back: 2373*58b9f456SAndroid Build Coastguard Worker size_type __back_capacity = __back_spare() / __base::__block_size; 2374*58b9f456SAndroid Build Coastguard Worker __back_capacity = _VSTD::min(__back_capacity, __nb); // don't take more than you need 2375*58b9f456SAndroid Build Coastguard Worker __nb -= __back_capacity; // number of blocks need to allocate 2376*58b9f456SAndroid Build Coastguard Worker // If __nb == 0, then we have sufficient capacity. 2377*58b9f456SAndroid Build Coastguard Worker if (__nb == 0) 2378*58b9f456SAndroid Build Coastguard Worker { 2379*58b9f456SAndroid Build Coastguard Worker __base::__start_ += __base::__block_size * __back_capacity; 2380*58b9f456SAndroid Build Coastguard Worker for (; __back_capacity > 0; --__back_capacity) 2381*58b9f456SAndroid Build Coastguard Worker { 2382*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.back(); 2383*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2384*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__pt); 2385*58b9f456SAndroid Build Coastguard Worker } 2386*58b9f456SAndroid Build Coastguard Worker } 2387*58b9f456SAndroid Build Coastguard Worker // Else if __nb <= __map_.capacity() - __map_.size() then we need to allocate __nb buffers 2388*58b9f456SAndroid Build Coastguard Worker else if (__nb <= __base::__map_.capacity() - __base::__map_.size()) 2389*58b9f456SAndroid Build Coastguard Worker { // we can put the new buffers into the map, but don't shift things around 2390*58b9f456SAndroid Build Coastguard Worker // until all buffers are allocated. If we throw, we don't need to fix 2391*58b9f456SAndroid Build Coastguard Worker // anything up (any added buffers are undetectible) 2392*58b9f456SAndroid Build Coastguard Worker for (; __nb > 0; --__nb, __base::__start_ += __base::__block_size - (__base::__map_.size() == 1)) 2393*58b9f456SAndroid Build Coastguard Worker { 2394*58b9f456SAndroid Build Coastguard Worker if (__base::__map_.__front_spare() == 0) 2395*58b9f456SAndroid Build Coastguard Worker break; 2396*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size)); 2397*58b9f456SAndroid Build Coastguard Worker } 2398*58b9f456SAndroid Build Coastguard Worker for (; __nb > 0; --__nb, ++__back_capacity) 2399*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size)); 2400*58b9f456SAndroid Build Coastguard Worker // Done allocating, reorder capacity 2401*58b9f456SAndroid Build Coastguard Worker __base::__start_ += __back_capacity * __base::__block_size; 2402*58b9f456SAndroid Build Coastguard Worker for (; __back_capacity > 0; --__back_capacity) 2403*58b9f456SAndroid Build Coastguard Worker { 2404*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.back(); 2405*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2406*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__pt); 2407*58b9f456SAndroid Build Coastguard Worker } 2408*58b9f456SAndroid Build Coastguard Worker } 2409*58b9f456SAndroid Build Coastguard Worker // Else need to allocate __nb buffers, *and* we need to reallocate __map_. 2410*58b9f456SAndroid Build Coastguard Worker else 2411*58b9f456SAndroid Build Coastguard Worker { 2412*58b9f456SAndroid Build Coastguard Worker size_type __ds = (__nb + __back_capacity) * __base::__block_size - __base::__map_.empty(); 2413*58b9f456SAndroid Build Coastguard Worker __split_buffer<pointer, typename __base::__pointer_allocator&> 2414*58b9f456SAndroid Build Coastguard Worker __buf(max<size_type>(2* __base::__map_.capacity(), 2415*58b9f456SAndroid Build Coastguard Worker __nb + __base::__map_.size()), 2416*58b9f456SAndroid Build Coastguard Worker 0, __base::__map_.__alloc()); 2417*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2418*58b9f456SAndroid Build Coastguard Worker try 2419*58b9f456SAndroid Build Coastguard Worker { 2420*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2421*58b9f456SAndroid Build Coastguard Worker for (; __nb > 0; --__nb) 2422*58b9f456SAndroid Build Coastguard Worker __buf.push_back(__alloc_traits::allocate(__a, __base::__block_size)); 2423*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2424*58b9f456SAndroid Build Coastguard Worker } 2425*58b9f456SAndroid Build Coastguard Worker catch (...) 2426*58b9f456SAndroid Build Coastguard Worker { 2427*58b9f456SAndroid Build Coastguard Worker for (typename __base::__map_pointer __i = __buf.begin(); 2428*58b9f456SAndroid Build Coastguard Worker __i != __buf.end(); ++__i) 2429*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, *__i, __base::__block_size); 2430*58b9f456SAndroid Build Coastguard Worker throw; 2431*58b9f456SAndroid Build Coastguard Worker } 2432*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2433*58b9f456SAndroid Build Coastguard Worker for (; __back_capacity > 0; --__back_capacity) 2434*58b9f456SAndroid Build Coastguard Worker { 2435*58b9f456SAndroid Build Coastguard Worker __buf.push_back(__base::__map_.back()); 2436*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2437*58b9f456SAndroid Build Coastguard Worker } 2438*58b9f456SAndroid Build Coastguard Worker for (typename __base::__map_pointer __i = __base::__map_.begin(); 2439*58b9f456SAndroid Build Coastguard Worker __i != __base::__map_.end(); ++__i) 2440*58b9f456SAndroid Build Coastguard Worker __buf.push_back(*__i); 2441*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__first_, __buf.__first_); 2442*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__begin_, __buf.__begin_); 2443*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_, __buf.__end_); 2444*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap()); 2445*58b9f456SAndroid Build Coastguard Worker __base::__start_ += __ds; 2446*58b9f456SAndroid Build Coastguard Worker } 2447*58b9f456SAndroid Build Coastguard Worker} 2448*58b9f456SAndroid Build Coastguard Worker 2449*58b9f456SAndroid Build Coastguard Worker// Create back capacity for one block of elements. 2450*58b9f456SAndroid Build Coastguard Worker// Strong guarantee. Either do it or don't touch anything. 2451*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2452*58b9f456SAndroid Build Coastguard Workervoid 2453*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__add_back_capacity() 2454*58b9f456SAndroid Build Coastguard Worker{ 2455*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2456*58b9f456SAndroid Build Coastguard Worker if (__front_spare() >= __base::__block_size) 2457*58b9f456SAndroid Build Coastguard Worker { 2458*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size; 2459*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.front(); 2460*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2461*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__pt); 2462*58b9f456SAndroid Build Coastguard Worker } 2463*58b9f456SAndroid Build Coastguard Worker // Else if __nb <= __map_.capacity() - __map_.size() then we need to allocate __nb buffers 2464*58b9f456SAndroid Build Coastguard Worker else if (__base::__map_.size() < __base::__map_.capacity()) 2465*58b9f456SAndroid Build Coastguard Worker { // we can put the new buffer into the map, but don't shift things around 2466*58b9f456SAndroid Build Coastguard Worker // until it is allocated. If we throw, we don't need to fix 2467*58b9f456SAndroid Build Coastguard Worker // anything up (any added buffers are undetectible) 2468*58b9f456SAndroid Build Coastguard Worker if (__base::__map_.__back_spare() != 0) 2469*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size)); 2470*58b9f456SAndroid Build Coastguard Worker else 2471*58b9f456SAndroid Build Coastguard Worker { 2472*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size)); 2473*58b9f456SAndroid Build Coastguard Worker // Done allocating, reorder capacity 2474*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.front(); 2475*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2476*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__pt); 2477*58b9f456SAndroid Build Coastguard Worker } 2478*58b9f456SAndroid Build Coastguard Worker } 2479*58b9f456SAndroid Build Coastguard Worker // Else need to allocate 1 buffer, *and* we need to reallocate __map_. 2480*58b9f456SAndroid Build Coastguard Worker else 2481*58b9f456SAndroid Build Coastguard Worker { 2482*58b9f456SAndroid Build Coastguard Worker __split_buffer<pointer, typename __base::__pointer_allocator&> 2483*58b9f456SAndroid Build Coastguard Worker __buf(max<size_type>(2* __base::__map_.capacity(), 1), 2484*58b9f456SAndroid Build Coastguard Worker __base::__map_.size(), 2485*58b9f456SAndroid Build Coastguard Worker __base::__map_.__alloc()); 2486*58b9f456SAndroid Build Coastguard Worker 2487*58b9f456SAndroid Build Coastguard Worker typedef __allocator_destructor<_Allocator> _Dp; 2488*58b9f456SAndroid Build Coastguard Worker unique_ptr<pointer, _Dp> __hold( 2489*58b9f456SAndroid Build Coastguard Worker __alloc_traits::allocate(__a, __base::__block_size), 2490*58b9f456SAndroid Build Coastguard Worker _Dp(__a, __base::__block_size)); 2491*58b9f456SAndroid Build Coastguard Worker __buf.push_back(__hold.get()); 2492*58b9f456SAndroid Build Coastguard Worker __hold.release(); 2493*58b9f456SAndroid Build Coastguard Worker 2494*58b9f456SAndroid Build Coastguard Worker for (typename __base::__map_pointer __i = __base::__map_.end(); 2495*58b9f456SAndroid Build Coastguard Worker __i != __base::__map_.begin();) 2496*58b9f456SAndroid Build Coastguard Worker __buf.push_front(*--__i); 2497*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__first_, __buf.__first_); 2498*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__begin_, __buf.__begin_); 2499*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_, __buf.__end_); 2500*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap()); 2501*58b9f456SAndroid Build Coastguard Worker } 2502*58b9f456SAndroid Build Coastguard Worker} 2503*58b9f456SAndroid Build Coastguard Worker 2504*58b9f456SAndroid Build Coastguard Worker// Create back capacity for __n elements. 2505*58b9f456SAndroid Build Coastguard Worker// Strong guarantee. Either do it or don't touch anything. 2506*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2507*58b9f456SAndroid Build Coastguard Workervoid 2508*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__add_back_capacity(size_type __n) 2509*58b9f456SAndroid Build Coastguard Worker{ 2510*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2511*58b9f456SAndroid Build Coastguard Worker size_type __nb = __recommend_blocks(__n + __base::__map_.empty()); 2512*58b9f456SAndroid Build Coastguard Worker // Number of unused blocks at front: 2513*58b9f456SAndroid Build Coastguard Worker size_type __front_capacity = __front_spare() / __base::__block_size; 2514*58b9f456SAndroid Build Coastguard Worker __front_capacity = _VSTD::min(__front_capacity, __nb); // don't take more than you need 2515*58b9f456SAndroid Build Coastguard Worker __nb -= __front_capacity; // number of blocks need to allocate 2516*58b9f456SAndroid Build Coastguard Worker // If __nb == 0, then we have sufficient capacity. 2517*58b9f456SAndroid Build Coastguard Worker if (__nb == 0) 2518*58b9f456SAndroid Build Coastguard Worker { 2519*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size * __front_capacity; 2520*58b9f456SAndroid Build Coastguard Worker for (; __front_capacity > 0; --__front_capacity) 2521*58b9f456SAndroid Build Coastguard Worker { 2522*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.front(); 2523*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2524*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__pt); 2525*58b9f456SAndroid Build Coastguard Worker } 2526*58b9f456SAndroid Build Coastguard Worker } 2527*58b9f456SAndroid Build Coastguard Worker // Else if __nb <= __map_.capacity() - __map_.size() then we need to allocate __nb buffers 2528*58b9f456SAndroid Build Coastguard Worker else if (__nb <= __base::__map_.capacity() - __base::__map_.size()) 2529*58b9f456SAndroid Build Coastguard Worker { // we can put the new buffers into the map, but don't shift things around 2530*58b9f456SAndroid Build Coastguard Worker // until all buffers are allocated. If we throw, we don't need to fix 2531*58b9f456SAndroid Build Coastguard Worker // anything up (any added buffers are undetectible) 2532*58b9f456SAndroid Build Coastguard Worker for (; __nb > 0; --__nb) 2533*58b9f456SAndroid Build Coastguard Worker { 2534*58b9f456SAndroid Build Coastguard Worker if (__base::__map_.__back_spare() == 0) 2535*58b9f456SAndroid Build Coastguard Worker break; 2536*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__alloc_traits::allocate(__a, __base::__block_size)); 2537*58b9f456SAndroid Build Coastguard Worker } 2538*58b9f456SAndroid Build Coastguard Worker for (; __nb > 0; --__nb, ++__front_capacity, __base::__start_ += 2539*58b9f456SAndroid Build Coastguard Worker __base::__block_size - (__base::__map_.size() == 1)) 2540*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_front(__alloc_traits::allocate(__a, __base::__block_size)); 2541*58b9f456SAndroid Build Coastguard Worker // Done allocating, reorder capacity 2542*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size * __front_capacity; 2543*58b9f456SAndroid Build Coastguard Worker for (; __front_capacity > 0; --__front_capacity) 2544*58b9f456SAndroid Build Coastguard Worker { 2545*58b9f456SAndroid Build Coastguard Worker pointer __pt = __base::__map_.front(); 2546*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2547*58b9f456SAndroid Build Coastguard Worker __base::__map_.push_back(__pt); 2548*58b9f456SAndroid Build Coastguard Worker } 2549*58b9f456SAndroid Build Coastguard Worker } 2550*58b9f456SAndroid Build Coastguard Worker // Else need to allocate __nb buffers, *and* we need to reallocate __map_. 2551*58b9f456SAndroid Build Coastguard Worker else 2552*58b9f456SAndroid Build Coastguard Worker { 2553*58b9f456SAndroid Build Coastguard Worker size_type __ds = __front_capacity * __base::__block_size; 2554*58b9f456SAndroid Build Coastguard Worker __split_buffer<pointer, typename __base::__pointer_allocator&> 2555*58b9f456SAndroid Build Coastguard Worker __buf(max<size_type>(2* __base::__map_.capacity(), 2556*58b9f456SAndroid Build Coastguard Worker __nb + __base::__map_.size()), 2557*58b9f456SAndroid Build Coastguard Worker __base::__map_.size() - __front_capacity, 2558*58b9f456SAndroid Build Coastguard Worker __base::__map_.__alloc()); 2559*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2560*58b9f456SAndroid Build Coastguard Worker try 2561*58b9f456SAndroid Build Coastguard Worker { 2562*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2563*58b9f456SAndroid Build Coastguard Worker for (; __nb > 0; --__nb) 2564*58b9f456SAndroid Build Coastguard Worker __buf.push_back(__alloc_traits::allocate(__a, __base::__block_size)); 2565*58b9f456SAndroid Build Coastguard Worker#ifndef _LIBCPP_NO_EXCEPTIONS 2566*58b9f456SAndroid Build Coastguard Worker } 2567*58b9f456SAndroid Build Coastguard Worker catch (...) 2568*58b9f456SAndroid Build Coastguard Worker { 2569*58b9f456SAndroid Build Coastguard Worker for (typename __base::__map_pointer __i = __buf.begin(); 2570*58b9f456SAndroid Build Coastguard Worker __i != __buf.end(); ++__i) 2571*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, *__i, __base::__block_size); 2572*58b9f456SAndroid Build Coastguard Worker throw; 2573*58b9f456SAndroid Build Coastguard Worker } 2574*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_NO_EXCEPTIONS 2575*58b9f456SAndroid Build Coastguard Worker for (; __front_capacity > 0; --__front_capacity) 2576*58b9f456SAndroid Build Coastguard Worker { 2577*58b9f456SAndroid Build Coastguard Worker __buf.push_back(__base::__map_.front()); 2578*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2579*58b9f456SAndroid Build Coastguard Worker } 2580*58b9f456SAndroid Build Coastguard Worker for (typename __base::__map_pointer __i = __base::__map_.end(); 2581*58b9f456SAndroid Build Coastguard Worker __i != __base::__map_.begin();) 2582*58b9f456SAndroid Build Coastguard Worker __buf.push_front(*--__i); 2583*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__first_, __buf.__first_); 2584*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__begin_, __buf.__begin_); 2585*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_, __buf.__end_); 2586*58b9f456SAndroid Build Coastguard Worker _VSTD::swap(__base::__map_.__end_cap(), __buf.__end_cap()); 2587*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __ds; 2588*58b9f456SAndroid Build Coastguard Worker } 2589*58b9f456SAndroid Build Coastguard Worker} 2590*58b9f456SAndroid Build Coastguard Worker 2591*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2592*58b9f456SAndroid Build Coastguard Workervoid 2593*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::pop_front() 2594*58b9f456SAndroid Build Coastguard Worker{ 2595*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2596*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, __to_raw_pointer(*(__base::__map_.begin() + 2597*58b9f456SAndroid Build Coastguard Worker __base::__start_ / __base::__block_size) + 2598*58b9f456SAndroid Build Coastguard Worker __base::__start_ % __base::__block_size)); 2599*58b9f456SAndroid Build Coastguard Worker --__base::size(); 2600*58b9f456SAndroid Build Coastguard Worker if (++__base::__start_ >= 2 * __base::__block_size) 2601*58b9f456SAndroid Build Coastguard Worker { 2602*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size); 2603*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2604*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size; 2605*58b9f456SAndroid Build Coastguard Worker } 2606*58b9f456SAndroid Build Coastguard Worker} 2607*58b9f456SAndroid Build Coastguard Worker 2608*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2609*58b9f456SAndroid Build Coastguard Workervoid 2610*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::pop_back() 2611*58b9f456SAndroid Build Coastguard Worker{ 2612*58b9f456SAndroid Build Coastguard Worker _LIBCPP_ASSERT(!empty(), "deque::pop_back called for empty deque"); 2613*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2614*58b9f456SAndroid Build Coastguard Worker size_type __p = __base::size() + __base::__start_ - 1; 2615*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, __to_raw_pointer(*(__base::__map_.begin() + 2616*58b9f456SAndroid Build Coastguard Worker __p / __base::__block_size) + 2617*58b9f456SAndroid Build Coastguard Worker __p % __base::__block_size)); 2618*58b9f456SAndroid Build Coastguard Worker --__base::size(); 2619*58b9f456SAndroid Build Coastguard Worker if (__back_spare() >= 2 * __base::__block_size) 2620*58b9f456SAndroid Build Coastguard Worker { 2621*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size); 2622*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2623*58b9f456SAndroid Build Coastguard Worker } 2624*58b9f456SAndroid Build Coastguard Worker} 2625*58b9f456SAndroid Build Coastguard Worker 2626*58b9f456SAndroid Build Coastguard Worker// move assign [__f, __l) to [__r, __r + (__l-__f)). 2627*58b9f456SAndroid Build Coastguard Worker// If __vt points into [__f, __l), then subtract (__f - __r) from __vt. 2628*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2629*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2630*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__move_and_check(iterator __f, iterator __l, iterator __r, 2631*58b9f456SAndroid Build Coastguard Worker const_pointer& __vt) 2632*58b9f456SAndroid Build Coastguard Worker{ 2633*58b9f456SAndroid Build Coastguard Worker // as if 2634*58b9f456SAndroid Build Coastguard Worker // for (; __f != __l; ++__f, ++__r) 2635*58b9f456SAndroid Build Coastguard Worker // *__r = _VSTD::move(*__f); 2636*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 2637*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 2638*58b9f456SAndroid Build Coastguard Worker { 2639*58b9f456SAndroid Build Coastguard Worker pointer __fb = __f.__ptr_; 2640*58b9f456SAndroid Build Coastguard Worker pointer __fe = *__f.__m_iter_ + __base::__block_size; 2641*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __fe - __fb; 2642*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 2643*58b9f456SAndroid Build Coastguard Worker { 2644*58b9f456SAndroid Build Coastguard Worker __bs = __n; 2645*58b9f456SAndroid Build Coastguard Worker __fe = __fb + __bs; 2646*58b9f456SAndroid Build Coastguard Worker } 2647*58b9f456SAndroid Build Coastguard Worker if (__fb <= __vt && __vt < __fe) 2648*58b9f456SAndroid Build Coastguard Worker __vt = (const_iterator(static_cast<__map_const_pointer>(__f.__m_iter_), __vt) -= __f - __r).__ptr_; 2649*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::move(__fb, __fe, __r); 2650*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 2651*58b9f456SAndroid Build Coastguard Worker __f += __bs; 2652*58b9f456SAndroid Build Coastguard Worker } 2653*58b9f456SAndroid Build Coastguard Worker return __r; 2654*58b9f456SAndroid Build Coastguard Worker} 2655*58b9f456SAndroid Build Coastguard Worker 2656*58b9f456SAndroid Build Coastguard Worker// move assign [__f, __l) to [__r - (__l-__f), __r) backwards. 2657*58b9f456SAndroid Build Coastguard Worker// If __vt points into [__f, __l), then add (__r - __l) to __vt. 2658*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2659*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2660*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__move_backward_and_check(iterator __f, iterator __l, iterator __r, 2661*58b9f456SAndroid Build Coastguard Worker const_pointer& __vt) 2662*58b9f456SAndroid Build Coastguard Worker{ 2663*58b9f456SAndroid Build Coastguard Worker // as if 2664*58b9f456SAndroid Build Coastguard Worker // while (__f != __l) 2665*58b9f456SAndroid Build Coastguard Worker // *--__r = _VSTD::move(*--__l); 2666*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 2667*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 2668*58b9f456SAndroid Build Coastguard Worker { 2669*58b9f456SAndroid Build Coastguard Worker --__l; 2670*58b9f456SAndroid Build Coastguard Worker pointer __lb = *__l.__m_iter_; 2671*58b9f456SAndroid Build Coastguard Worker pointer __le = __l.__ptr_ + 1; 2672*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __le - __lb; 2673*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 2674*58b9f456SAndroid Build Coastguard Worker { 2675*58b9f456SAndroid Build Coastguard Worker __bs = __n; 2676*58b9f456SAndroid Build Coastguard Worker __lb = __le - __bs; 2677*58b9f456SAndroid Build Coastguard Worker } 2678*58b9f456SAndroid Build Coastguard Worker if (__lb <= __vt && __vt < __le) 2679*58b9f456SAndroid Build Coastguard Worker __vt = (const_iterator(static_cast<__map_const_pointer>(__l.__m_iter_), __vt) += __r - __l - 1).__ptr_; 2680*58b9f456SAndroid Build Coastguard Worker __r = _VSTD::move_backward(__lb, __le, __r); 2681*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 2682*58b9f456SAndroid Build Coastguard Worker __l -= __bs - 1; 2683*58b9f456SAndroid Build Coastguard Worker } 2684*58b9f456SAndroid Build Coastguard Worker return __r; 2685*58b9f456SAndroid Build Coastguard Worker} 2686*58b9f456SAndroid Build Coastguard Worker 2687*58b9f456SAndroid Build Coastguard Worker// move construct [__f, __l) to [__r, __r + (__l-__f)). 2688*58b9f456SAndroid Build Coastguard Worker// If __vt points into [__f, __l), then add (__r - __f) to __vt. 2689*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2690*58b9f456SAndroid Build Coastguard Workervoid 2691*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__move_construct_and_check(iterator __f, iterator __l, 2692*58b9f456SAndroid Build Coastguard Worker iterator __r, const_pointer& __vt) 2693*58b9f456SAndroid Build Coastguard Worker{ 2694*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2695*58b9f456SAndroid Build Coastguard Worker // as if 2696*58b9f456SAndroid Build Coastguard Worker // for (; __f != __l; ++__r, ++__f, ++__base::size()) 2697*58b9f456SAndroid Build Coastguard Worker // __alloc_traits::construct(__a, _VSTD::addressof(*__r), _VSTD::move(*__f)); 2698*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 2699*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 2700*58b9f456SAndroid Build Coastguard Worker { 2701*58b9f456SAndroid Build Coastguard Worker pointer __fb = __f.__ptr_; 2702*58b9f456SAndroid Build Coastguard Worker pointer __fe = *__f.__m_iter_ + __base::__block_size; 2703*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __fe - __fb; 2704*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 2705*58b9f456SAndroid Build Coastguard Worker { 2706*58b9f456SAndroid Build Coastguard Worker __bs = __n; 2707*58b9f456SAndroid Build Coastguard Worker __fe = __fb + __bs; 2708*58b9f456SAndroid Build Coastguard Worker } 2709*58b9f456SAndroid Build Coastguard Worker if (__fb <= __vt && __vt < __fe) 2710*58b9f456SAndroid Build Coastguard Worker __vt = (const_iterator(static_cast<__map_const_pointer>(__f.__m_iter_), __vt) += __r - __f).__ptr_; 2711*58b9f456SAndroid Build Coastguard Worker for (; __fb != __fe; ++__fb, ++__r, ++__base::size()) 2712*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*__r), _VSTD::move(*__fb)); 2713*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 2714*58b9f456SAndroid Build Coastguard Worker __f += __bs; 2715*58b9f456SAndroid Build Coastguard Worker } 2716*58b9f456SAndroid Build Coastguard Worker} 2717*58b9f456SAndroid Build Coastguard Worker 2718*58b9f456SAndroid Build Coastguard Worker// move construct [__f, __l) to [__r - (__l-__f), __r) backwards. 2719*58b9f456SAndroid Build Coastguard Worker// If __vt points into [__f, __l), then subtract (__l - __r) from __vt. 2720*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2721*58b9f456SAndroid Build Coastguard Workervoid 2722*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__move_construct_backward_and_check(iterator __f, iterator __l, 2723*58b9f456SAndroid Build Coastguard Worker iterator __r, const_pointer& __vt) 2724*58b9f456SAndroid Build Coastguard Worker{ 2725*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2726*58b9f456SAndroid Build Coastguard Worker // as if 2727*58b9f456SAndroid Build Coastguard Worker // for (iterator __j = __l; __j != __f;) 2728*58b9f456SAndroid Build Coastguard Worker // { 2729*58b9f456SAndroid Build Coastguard Worker // __alloc_traitsconstruct(__a, _VSTD::addressof(*--__r), _VSTD::move(*--__j)); 2730*58b9f456SAndroid Build Coastguard Worker // --__base::__start_; 2731*58b9f456SAndroid Build Coastguard Worker // ++__base::size(); 2732*58b9f456SAndroid Build Coastguard Worker // } 2733*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 2734*58b9f456SAndroid Build Coastguard Worker while (__n > 0) 2735*58b9f456SAndroid Build Coastguard Worker { 2736*58b9f456SAndroid Build Coastguard Worker --__l; 2737*58b9f456SAndroid Build Coastguard Worker pointer __lb = *__l.__m_iter_; 2738*58b9f456SAndroid Build Coastguard Worker pointer __le = __l.__ptr_ + 1; 2739*58b9f456SAndroid Build Coastguard Worker difference_type __bs = __le - __lb; 2740*58b9f456SAndroid Build Coastguard Worker if (__bs > __n) 2741*58b9f456SAndroid Build Coastguard Worker { 2742*58b9f456SAndroid Build Coastguard Worker __bs = __n; 2743*58b9f456SAndroid Build Coastguard Worker __lb = __le - __bs; 2744*58b9f456SAndroid Build Coastguard Worker } 2745*58b9f456SAndroid Build Coastguard Worker if (__lb <= __vt && __vt < __le) 2746*58b9f456SAndroid Build Coastguard Worker __vt = (const_iterator(static_cast<__map_const_pointer>(__l.__m_iter_), __vt) -= __l - __r + 1).__ptr_; 2747*58b9f456SAndroid Build Coastguard Worker while (__le != __lb) 2748*58b9f456SAndroid Build Coastguard Worker { 2749*58b9f456SAndroid Build Coastguard Worker __alloc_traits::construct(__a, _VSTD::addressof(*--__r), _VSTD::move(*--__le)); 2750*58b9f456SAndroid Build Coastguard Worker --__base::__start_; 2751*58b9f456SAndroid Build Coastguard Worker ++__base::size(); 2752*58b9f456SAndroid Build Coastguard Worker } 2753*58b9f456SAndroid Build Coastguard Worker __n -= __bs; 2754*58b9f456SAndroid Build Coastguard Worker __l -= __bs - 1; 2755*58b9f456SAndroid Build Coastguard Worker } 2756*58b9f456SAndroid Build Coastguard Worker} 2757*58b9f456SAndroid Build Coastguard Worker 2758*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2759*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2760*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::erase(const_iterator __f) 2761*58b9f456SAndroid Build Coastguard Worker{ 2762*58b9f456SAndroid Build Coastguard Worker iterator __b = __base::begin(); 2763*58b9f456SAndroid Build Coastguard Worker difference_type __pos = __f - __b; 2764*58b9f456SAndroid Build Coastguard Worker iterator __p = __b + __pos; 2765*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2766*58b9f456SAndroid Build Coastguard Worker if (static_cast<size_t>(__pos) <= (__base::size() - 1) / 2) 2767*58b9f456SAndroid Build Coastguard Worker { // erase from front 2768*58b9f456SAndroid Build Coastguard Worker _VSTD::move_backward(__b, __p, _VSTD::next(__p)); 2769*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, _VSTD::addressof(*__b)); 2770*58b9f456SAndroid Build Coastguard Worker --__base::size(); 2771*58b9f456SAndroid Build Coastguard Worker ++__base::__start_; 2772*58b9f456SAndroid Build Coastguard Worker if (__front_spare() >= 2 * __base::__block_size) 2773*58b9f456SAndroid Build Coastguard Worker { 2774*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size); 2775*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2776*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size; 2777*58b9f456SAndroid Build Coastguard Worker } 2778*58b9f456SAndroid Build Coastguard Worker } 2779*58b9f456SAndroid Build Coastguard Worker else 2780*58b9f456SAndroid Build Coastguard Worker { // erase from back 2781*58b9f456SAndroid Build Coastguard Worker iterator __i = _VSTD::move(_VSTD::next(__p), __base::end(), __p); 2782*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, _VSTD::addressof(*__i)); 2783*58b9f456SAndroid Build Coastguard Worker --__base::size(); 2784*58b9f456SAndroid Build Coastguard Worker if (__back_spare() >= 2 * __base::__block_size) 2785*58b9f456SAndroid Build Coastguard Worker { 2786*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size); 2787*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2788*58b9f456SAndroid Build Coastguard Worker } 2789*58b9f456SAndroid Build Coastguard Worker } 2790*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 2791*58b9f456SAndroid Build Coastguard Worker} 2792*58b9f456SAndroid Build Coastguard Worker 2793*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2794*58b9f456SAndroid Build Coastguard Workertypename deque<_Tp, _Allocator>::iterator 2795*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::erase(const_iterator __f, const_iterator __l) 2796*58b9f456SAndroid Build Coastguard Worker{ 2797*58b9f456SAndroid Build Coastguard Worker difference_type __n = __l - __f; 2798*58b9f456SAndroid Build Coastguard Worker iterator __b = __base::begin(); 2799*58b9f456SAndroid Build Coastguard Worker difference_type __pos = __f - __b; 2800*58b9f456SAndroid Build Coastguard Worker iterator __p = __b + __pos; 2801*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 2802*58b9f456SAndroid Build Coastguard Worker { 2803*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2804*58b9f456SAndroid Build Coastguard Worker if (static_cast<size_t>(__pos) <= (__base::size() - __n) / 2) 2805*58b9f456SAndroid Build Coastguard Worker { // erase from front 2806*58b9f456SAndroid Build Coastguard Worker iterator __i = _VSTD::move_backward(__b, __p, __p + __n); 2807*58b9f456SAndroid Build Coastguard Worker for (; __b != __i; ++__b) 2808*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, _VSTD::addressof(*__b)); 2809*58b9f456SAndroid Build Coastguard Worker __base::size() -= __n; 2810*58b9f456SAndroid Build Coastguard Worker __base::__start_ += __n; 2811*58b9f456SAndroid Build Coastguard Worker while (__front_spare() >= 2 * __base::__block_size) 2812*58b9f456SAndroid Build Coastguard Worker { 2813*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.front(), __base::__block_size); 2814*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_front(); 2815*58b9f456SAndroid Build Coastguard Worker __base::__start_ -= __base::__block_size; 2816*58b9f456SAndroid Build Coastguard Worker } 2817*58b9f456SAndroid Build Coastguard Worker } 2818*58b9f456SAndroid Build Coastguard Worker else 2819*58b9f456SAndroid Build Coastguard Worker { // erase from back 2820*58b9f456SAndroid Build Coastguard Worker iterator __i = _VSTD::move(__p + __n, __base::end(), __p); 2821*58b9f456SAndroid Build Coastguard Worker for (iterator __e = __base::end(); __i != __e; ++__i) 2822*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, _VSTD::addressof(*__i)); 2823*58b9f456SAndroid Build Coastguard Worker __base::size() -= __n; 2824*58b9f456SAndroid Build Coastguard Worker while (__back_spare() >= 2 * __base::__block_size) 2825*58b9f456SAndroid Build Coastguard Worker { 2826*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size); 2827*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2828*58b9f456SAndroid Build Coastguard Worker } 2829*58b9f456SAndroid Build Coastguard Worker } 2830*58b9f456SAndroid Build Coastguard Worker } 2831*58b9f456SAndroid Build Coastguard Worker return __base::begin() + __pos; 2832*58b9f456SAndroid Build Coastguard Worker} 2833*58b9f456SAndroid Build Coastguard Worker 2834*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2835*58b9f456SAndroid Build Coastguard Workervoid 2836*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::__erase_to_end(const_iterator __f) 2837*58b9f456SAndroid Build Coastguard Worker{ 2838*58b9f456SAndroid Build Coastguard Worker iterator __e = __base::end(); 2839*58b9f456SAndroid Build Coastguard Worker difference_type __n = __e - __f; 2840*58b9f456SAndroid Build Coastguard Worker if (__n > 0) 2841*58b9f456SAndroid Build Coastguard Worker { 2842*58b9f456SAndroid Build Coastguard Worker allocator_type& __a = __base::__alloc(); 2843*58b9f456SAndroid Build Coastguard Worker iterator __b = __base::begin(); 2844*58b9f456SAndroid Build Coastguard Worker difference_type __pos = __f - __b; 2845*58b9f456SAndroid Build Coastguard Worker for (iterator __p = __b + __pos; __p != __e; ++__p) 2846*58b9f456SAndroid Build Coastguard Worker __alloc_traits::destroy(__a, _VSTD::addressof(*__p)); 2847*58b9f456SAndroid Build Coastguard Worker __base::size() -= __n; 2848*58b9f456SAndroid Build Coastguard Worker while (__back_spare() >= 2 * __base::__block_size) 2849*58b9f456SAndroid Build Coastguard Worker { 2850*58b9f456SAndroid Build Coastguard Worker __alloc_traits::deallocate(__a, __base::__map_.back(), __base::__block_size); 2851*58b9f456SAndroid Build Coastguard Worker __base::__map_.pop_back(); 2852*58b9f456SAndroid Build Coastguard Worker } 2853*58b9f456SAndroid Build Coastguard Worker } 2854*58b9f456SAndroid Build Coastguard Worker} 2855*58b9f456SAndroid Build Coastguard Worker 2856*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2857*58b9f456SAndroid Build Coastguard Workerinline 2858*58b9f456SAndroid Build Coastguard Workervoid 2859*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::swap(deque& __c) 2860*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER >= 14 2861*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT 2862*58b9f456SAndroid Build Coastguard Worker#else 2863*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(!__alloc_traits::propagate_on_container_swap::value || 2864*58b9f456SAndroid Build Coastguard Worker __is_nothrow_swappable<allocator_type>::value) 2865*58b9f456SAndroid Build Coastguard Worker#endif 2866*58b9f456SAndroid Build Coastguard Worker{ 2867*58b9f456SAndroid Build Coastguard Worker __base::swap(__c); 2868*58b9f456SAndroid Build Coastguard Worker} 2869*58b9f456SAndroid Build Coastguard Worker 2870*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2871*58b9f456SAndroid Build Coastguard Workerinline 2872*58b9f456SAndroid Build Coastguard Workervoid 2873*58b9f456SAndroid Build Coastguard Workerdeque<_Tp, _Allocator>::clear() _NOEXCEPT 2874*58b9f456SAndroid Build Coastguard Worker{ 2875*58b9f456SAndroid Build Coastguard Worker __base::clear(); 2876*58b9f456SAndroid Build Coastguard Worker} 2877*58b9f456SAndroid Build Coastguard Worker 2878*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2879*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2880*58b9f456SAndroid Build Coastguard Workerbool 2881*58b9f456SAndroid Build Coastguard Workeroperator==(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) 2882*58b9f456SAndroid Build Coastguard Worker{ 2883*58b9f456SAndroid Build Coastguard Worker const typename deque<_Tp, _Allocator>::size_type __sz = __x.size(); 2884*58b9f456SAndroid Build Coastguard Worker return __sz == __y.size() && _VSTD::equal(__x.begin(), __x.end(), __y.begin()); 2885*58b9f456SAndroid Build Coastguard Worker} 2886*58b9f456SAndroid Build Coastguard Worker 2887*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2888*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2889*58b9f456SAndroid Build Coastguard Workerbool 2890*58b9f456SAndroid Build Coastguard Workeroperator!=(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) 2891*58b9f456SAndroid Build Coastguard Worker{ 2892*58b9f456SAndroid Build Coastguard Worker return !(__x == __y); 2893*58b9f456SAndroid Build Coastguard Worker} 2894*58b9f456SAndroid Build Coastguard Worker 2895*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2896*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2897*58b9f456SAndroid Build Coastguard Workerbool 2898*58b9f456SAndroid Build Coastguard Workeroperator< (const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) 2899*58b9f456SAndroid Build Coastguard Worker{ 2900*58b9f456SAndroid Build Coastguard Worker return _VSTD::lexicographical_compare(__x.begin(), __x.end(), __y.begin(), __y.end()); 2901*58b9f456SAndroid Build Coastguard Worker} 2902*58b9f456SAndroid Build Coastguard Worker 2903*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2904*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2905*58b9f456SAndroid Build Coastguard Workerbool 2906*58b9f456SAndroid Build Coastguard Workeroperator> (const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) 2907*58b9f456SAndroid Build Coastguard Worker{ 2908*58b9f456SAndroid Build Coastguard Worker return __y < __x; 2909*58b9f456SAndroid Build Coastguard Worker} 2910*58b9f456SAndroid Build Coastguard Worker 2911*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2912*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2913*58b9f456SAndroid Build Coastguard Workerbool 2914*58b9f456SAndroid Build Coastguard Workeroperator>=(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) 2915*58b9f456SAndroid Build Coastguard Worker{ 2916*58b9f456SAndroid Build Coastguard Worker return !(__x < __y); 2917*58b9f456SAndroid Build Coastguard Worker} 2918*58b9f456SAndroid Build Coastguard Worker 2919*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2920*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2921*58b9f456SAndroid Build Coastguard Workerbool 2922*58b9f456SAndroid Build Coastguard Workeroperator<=(const deque<_Tp, _Allocator>& __x, const deque<_Tp, _Allocator>& __y) 2923*58b9f456SAndroid Build Coastguard Worker{ 2924*58b9f456SAndroid Build Coastguard Worker return !(__y < __x); 2925*58b9f456SAndroid Build Coastguard Worker} 2926*58b9f456SAndroid Build Coastguard Worker 2927*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator> 2928*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2929*58b9f456SAndroid Build Coastguard Workervoid 2930*58b9f456SAndroid Build Coastguard Workerswap(deque<_Tp, _Allocator>& __x, deque<_Tp, _Allocator>& __y) 2931*58b9f456SAndroid Build Coastguard Worker _NOEXCEPT_(_NOEXCEPT_(__x.swap(__y))) 2932*58b9f456SAndroid Build Coastguard Worker{ 2933*58b9f456SAndroid Build Coastguard Worker __x.swap(__y); 2934*58b9f456SAndroid Build Coastguard Worker} 2935*58b9f456SAndroid Build Coastguard Worker 2936*58b9f456SAndroid Build Coastguard Worker#if _LIBCPP_STD_VER > 17 2937*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator, class _Up> 2938*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2939*58b9f456SAndroid Build Coastguard Workervoid erase(deque<_Tp, _Allocator>& __c, const _Up& __v) 2940*58b9f456SAndroid Build Coastguard Worker{ __c.erase(_VSTD::remove(__c.begin(), __c.end(), __v), __c.end()); } 2941*58b9f456SAndroid Build Coastguard Worker 2942*58b9f456SAndroid Build Coastguard Workertemplate <class _Tp, class _Allocator, class _Predicate> 2943*58b9f456SAndroid Build Coastguard Workerinline _LIBCPP_INLINE_VISIBILITY 2944*58b9f456SAndroid Build Coastguard Workervoid erase_if(deque<_Tp, _Allocator>& __c, _Predicate __pred) 2945*58b9f456SAndroid Build Coastguard Worker{ __c.erase(_VSTD::remove_if(__c.begin(), __c.end(), __pred), __c.end()); } 2946*58b9f456SAndroid Build Coastguard Worker#endif 2947*58b9f456SAndroid Build Coastguard Worker 2948*58b9f456SAndroid Build Coastguard Worker 2949*58b9f456SAndroid Build Coastguard Worker_LIBCPP_END_NAMESPACE_STD 2950*58b9f456SAndroid Build Coastguard Worker 2951*58b9f456SAndroid Build Coastguard Worker_LIBCPP_POP_MACROS 2952*58b9f456SAndroid Build Coastguard Worker 2953*58b9f456SAndroid Build Coastguard Worker#endif // _LIBCPP_DEQUE 2954