54 deque<_Tp, _Allocator>, _Allocator,
55 __gnu_debug::_Safe_sequence>,
56 public _GLIBCXX_STD_C::deque<_Tp, _Allocator>
58 typedef _GLIBCXX_STD_C::deque<_Tp, _Allocator> _Base;
62 typedef typename _Base::const_iterator _Base_const_iterator;
63 typedef typename _Base::iterator _Base_iterator;
66 template<
typename _ItT,
typename _SeqT,
typename _CatT>
67 friend class ::__gnu_debug::_Safe_iterator;
74 _Base_ref(
const _Base& __r) : _M_ref(__r) { }
80 typedef typename _Base::reference reference;
81 typedef typename _Base::const_reference const_reference;
88 typedef typename _Base::size_type size_type;
89 typedef typename _Base::difference_type difference_type;
91 typedef _Tp value_type;
92 typedef _Allocator allocator_type;
93 typedef typename _Base::pointer pointer;
94 typedef typename _Base::const_pointer const_pointer;
100#if __cplusplus < 201103L
104 deque(
const deque& __x)
110 deque(
const deque&) =
default;
111 deque(deque&&) =
default;
114 deque(
const deque& __d,
const __type_identity_t<_Allocator>& __a)
115 : _Base(__d, __a) { }
118 deque(deque&& __d,
const __type_identity_t<_Allocator>& __a)
123 const allocator_type& __a = allocator_type())
124 : _Base(__l, __a) { }
129 explicit _GLIBCXX26_CONSTEXPR
130 deque(
const _Allocator& __a)
133#if __cplusplus >= 201103L
134 explicit _GLIBCXX26_CONSTEXPR
135 deque(size_type __n,
const _Allocator& __a = _Allocator())
136 : _Base(__n, __a) { }
139 deque(size_type __n,
const __type_identity_t<_Tp>& __value,
140 const _Allocator& __a = _Allocator())
141 : _Base(__n, __value, __a) { }
144 deque(size_type __n,
const _Tp& __value = _Tp(),
145 const _Allocator& __a = _Allocator())
146 : _Base(__n, __value, __a) { }
149#if __cplusplus >= 201103L
150 template<
class _InputIterator,
151 typename = std::_RequireInputIter<_InputIterator>>
154 template<
class _InputIterator>
156 deque(_InputIterator __first, _InputIterator __last,
157 const _Allocator& __a = _Allocator())
159 : __glibcxx_check_valid_constructor_range(__first, __last)),
163#if __glibcxx_containers_ranges
164 template<__detail::__container_compatible_range<_Tp> _Rg>
166 deque(from_range_t, _Rg&& __rg,
const _Allocator& __a = _Allocator())
173 : _Base(__x._M_ref) { }
175#if __cplusplus >= 201103L
177 operator=(
const deque&) =
default;
180 operator=(deque&&) =
default;
182 _GLIBCXX26_CONSTEXPR deque&
185 _Base::operator=(__l);
186 if (!std::__is_constant_evaluated())
187 this->_M_invalidate_all();
192#if __cplusplus >= 201103L
193 template<
class _InputIterator,
194 typename = std::_RequireInputIter<_InputIterator>>
196 template<
class _InputIterator>
198 _GLIBCXX26_CONSTEXPR
void
199 assign(_InputIterator __first, _InputIterator __last)
201 if (std::__is_constant_evaluated())
202 return _Base::assign(__gnu_debug::__unsafe(__first),
203 __gnu_debug::__unsafe(__last));
205 typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
206 __glibcxx_check_valid_range2(__first, __last, __dist);
207 if (__dist.second >= __gnu_debug::__dp_sign)
208 _Base::assign(__gnu_debug::__unsafe(__first),
209 __gnu_debug::__unsafe(__last));
211 _Base::assign(__first, __last);
213 this->_M_invalidate_all();
216 _GLIBCXX26_CONSTEXPR
void
217 assign(size_type __n,
const _Tp& __t)
219 _Base::assign(__n, __t);
220 if (!std::__is_constant_evaluated())
221 this->_M_invalidate_all();
224#if __cplusplus >= 201103L
225 _GLIBCXX26_CONSTEXPR
void
229 if (!std::__is_constant_evaluated())
230 this->_M_invalidate_all();
234#if __glibcxx_containers_ranges
235 template<std::__detail::__container_compatible_range<_Tp> _Rg>
236 _GLIBCXX26_CONSTEXPR
void
237 assign_range(_Rg&& __rg)
240 if (!std::__is_constant_evaluated())
241 this->_M_invalidate_all();
245 using _Base::get_allocator;
249 _GLIBCXX26_CONSTEXPR iterator
250 begin() _GLIBCXX_NOEXCEPT
251 {
return iterator(_Base::begin(),
this); }
254 _GLIBCXX26_CONSTEXPR const_iterator
255 begin()
const _GLIBCXX_NOEXCEPT
256 {
return const_iterator(_Base::begin(),
this); }
259 _GLIBCXX26_CONSTEXPR iterator
260 end() _GLIBCXX_NOEXCEPT
261 {
return iterator(_Base::end(),
this); }
264 _GLIBCXX26_CONSTEXPR const_iterator
265 end()
const _GLIBCXX_NOEXCEPT
266 {
return const_iterator(_Base::end(),
this); }
269 _GLIBCXX26_CONSTEXPR reverse_iterator
270 rbegin() _GLIBCXX_NOEXCEPT
271 {
return reverse_iterator(end()); }
274 _GLIBCXX26_CONSTEXPR const_reverse_iterator
275 rbegin()
const _GLIBCXX_NOEXCEPT
276 {
return const_reverse_iterator(end()); }
279 _GLIBCXX26_CONSTEXPR reverse_iterator
280 rend() _GLIBCXX_NOEXCEPT
281 {
return reverse_iterator(begin()); }
284 _GLIBCXX26_CONSTEXPR const_reverse_iterator
285 rend()
const _GLIBCXX_NOEXCEPT
286 {
return const_reverse_iterator(begin()); }
288#if __cplusplus >= 201103L
290 _GLIBCXX26_CONSTEXPR const_iterator
291 cbegin()
const noexcept
292 {
return const_iterator(_Base::begin(),
this); }
295 _GLIBCXX26_CONSTEXPR const_iterator
296 cend()
const noexcept
297 {
return const_iterator(_Base::end(),
this); }
300 _GLIBCXX26_CONSTEXPR const_reverse_iterator
301 crbegin()
const noexcept
302 {
return const_reverse_iterator(end()); }
305 _GLIBCXX26_CONSTEXPR const_reverse_iterator
306 crend()
const noexcept
307 {
return const_reverse_iterator(begin()); }
311 _GLIBCXX26_CONSTEXPR
void
312 _M_invalidate_after_nth(difference_type __n)
315 this->_M_invalidate_if(_After_nth(__n, _Base::begin()));
321 using _Base::max_size;
323#if __cplusplus >= 201103L
324 _GLIBCXX26_CONSTEXPR
void
325 resize(size_type __sz)
327 if (std::__is_constant_evaluated())
328 return _Base::resize(__sz);
330 bool __invalidate_all = __sz > this->
size();
331 if (__sz < this->
size())
332 this->_M_invalidate_after_nth(__sz);
336 if (__invalidate_all)
337 this->_M_invalidate_all();
340 _GLIBCXX26_CONSTEXPR
void
341 resize(size_type __sz,
const _Tp& __c)
343 if (std::__is_constant_evaluated())
344 return _Base::resize(__sz, __c);
346 bool __invalidate_all = __sz > this->
size();
347 if (__sz < this->
size())
348 this->_M_invalidate_after_nth(__sz);
350 _Base::resize(__sz, __c);
352 if (__invalidate_all)
353 this->_M_invalidate_all();
357 resize(size_type __sz, _Tp __c = _Tp())
359 bool __invalidate_all = __sz > this->
size();
360 if (__sz < this->
size())
361 this->_M_invalidate_after_nth(__sz);
363 _Base::resize(__sz, __c);
365 if (__invalidate_all)
366 this->_M_invalidate_all();
370#if __cplusplus >= 201103L
371 _GLIBCXX26_CONSTEXPR
void
372 shrink_to_fit()
noexcept
374 if (_Base::_M_shrink_to_fit())
375 if (!std::__is_constant_evaluated())
376 this->_M_invalidate_all();
384 _GLIBCXX26_CONSTEXPR reference
385 operator[](size_type __n) _GLIBCXX_NOEXCEPT
387 __glibcxx_check_subscript(__n);
388 return _Base::operator[](__n);
392 _GLIBCXX26_CONSTEXPR const_reference
393 operator[](size_type __n)
const _GLIBCXX_NOEXCEPT
395 __glibcxx_check_subscript(__n);
396 return _Base::operator[](__n);
402 _GLIBCXX26_CONSTEXPR reference
403 front() _GLIBCXX_NOEXCEPT
405 __glibcxx_check_nonempty();
406 return _Base::front();
410 _GLIBCXX26_CONSTEXPR const_reference
411 front()
const _GLIBCXX_NOEXCEPT
413 __glibcxx_check_nonempty();
414 return _Base::front();
418 _GLIBCXX26_CONSTEXPR reference
419 back() _GLIBCXX_NOEXCEPT
421 __glibcxx_check_nonempty();
422 return _Base::back();
426 _GLIBCXX26_CONSTEXPR const_reference
427 back()
const _GLIBCXX_NOEXCEPT
429 __glibcxx_check_nonempty();
430 return _Base::back();
434 _GLIBCXX26_CONSTEXPR
void
435 push_front(
const _Tp& __x)
437 _Base::push_front(__x);
438 this->_M_invalidate_all();
441 _GLIBCXX26_CONSTEXPR
void
442 push_back(
const _Tp& __x)
444 _Base::push_back(__x);
445 this->_M_invalidate_all();
448#if __cplusplus >= 201103L
449 _GLIBCXX26_CONSTEXPR
void
450 push_front(_Tp&& __x)
453 _GLIBCXX26_CONSTEXPR
void
457 template<
typename... _Args>
458#if __cplusplus > 201402L
459 _GLIBCXX26_CONSTEXPR reference
463 emplace_front(_Args&&... __args)
466 if (!std::__is_constant_evaluated())
467 this->_M_invalidate_all();
468#if __cplusplus > 201402L
473 template<
typename... _Args>
474#if __cplusplus > 201402L
475 _GLIBCXX26_CONSTEXPR reference
479 emplace_back(_Args&&... __args)
482 if (!std::__is_constant_evaluated())
483 this->_M_invalidate_all();
484#if __cplusplus > 201402L
489 template<
typename... _Args>
490 _GLIBCXX26_CONSTEXPR iterator
491 emplace(const_iterator __position, _Args&&... __args)
493 if (std::__is_constant_evaluated())
494 return iterator(_Base::emplace(__position.
base(),
499 _Base_iterator __res = _Base::emplace(__position.
base(),
501 this->_M_invalidate_all();
502 return iterator(__res,
this);
506 _GLIBCXX26_CONSTEXPR iterator
507#if __cplusplus >= 201103L
508 insert(const_iterator __position,
const _Tp& __x)
510 insert(iterator __position,
const _Tp& __x)
513 if (std::__is_constant_evaluated())
514 return iterator(_Base::insert(__position.
base(), __x),
this);
517 _Base_iterator __res = _Base::insert(__position.
base(), __x);
518 this->_M_invalidate_all();
519 return iterator(__res,
this);
522#if __cplusplus >= 201103L
523 _GLIBCXX26_CONSTEXPR iterator
524 insert(const_iterator __position, _Tp&& __x)
525 {
return emplace(__position,
std::move(__x)); }
527 _GLIBCXX26_CONSTEXPR iterator
530 if (std::__is_constant_evaluated())
531 return iterator(_Base::insert(__position.
base(), __l),
this);
534 _Base_iterator __res = _Base::insert(__position.
base(), __l);
535 this->_M_invalidate_all();
536 return iterator(__res,
this);
540#if __cplusplus >= 201103L
541 _GLIBCXX26_CONSTEXPR iterator
542 insert(const_iterator __position, size_type __n,
const _Tp& __x)
544 if (std::__is_constant_evaluated())
545 return iterator(_Base::insert(__position.
base(), __n, __x),
this);
548 _Base_iterator __res = _Base::insert(__position.
base(), __n, __x);
549 this->_M_invalidate_all();
550 return iterator(__res,
this);
554 insert(iterator __position, size_type __n,
const _Tp& __x)
557 _Base::insert(__position.
base(), __n, __x);
558 this->_M_invalidate_all();
562#if __cplusplus >= 201103L
563 template<
class _InputIterator,
564 typename = std::_RequireInputIter<_InputIterator>>
565 _GLIBCXX26_CONSTEXPR iterator
566 insert(const_iterator __position,
567 _InputIterator __first, _InputIterator __last)
569 if (std::__is_constant_evaluated())
570 return iterator(_Base::insert(__position.
base(),
571 __gnu_debug::__unsafe(__first),
572 __gnu_debug::__unsafe(__last)),
this);
574 typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
576 _Base_iterator __res;
577 if (__dist.second >= __gnu_debug::__dp_sign)
578 __res = _Base::insert(__position.
base(),
579 __gnu_debug::__unsafe(__first),
580 __gnu_debug::__unsafe(__last));
582 __res = _Base::insert(__position.
base(), __first, __last);
584 this->_M_invalidate_all();
585 return iterator(__res,
this);
588 template<
class _InputIterator>
590 insert(iterator __position,
591 _InputIterator __first, _InputIterator __last)
593 typename __gnu_debug::_Distance_traits<_InputIterator>::__type __dist;
596 if (__dist.second >= __gnu_debug::__dp_sign)
597 _Base::insert(__position.
base(),
598 __gnu_debug::__unsafe(__first),
599 __gnu_debug::__unsafe(__last));
601 _Base::insert(__position.
base(), __first, __last);
603 this->_M_invalidate_all();
607#if __glibcxx_containers_ranges
608 template<__detail::__container_compatible_range<_Tp> _Rg>
609 _GLIBCXX26_CONSTEXPR iterator
610 insert_range(const_iterator __pos, _Rg&& __rg)
613 if (!std::__is_constant_evaluated())
614 this->_M_invalidate_all();
615 return iterator(__res,
this);
618 template<std::__detail::__container_compatible_range<_Tp> _Rg>
619 _GLIBCXX26_CONSTEXPR
void
620 prepend_range(_Rg&& __rg)
623 if (!std::__is_constant_evaluated())
624 this->_M_invalidate_all();
627 template<std::__detail::__container_compatible_range<_Tp> _Rg>
628 _GLIBCXX26_CONSTEXPR
void
629 append_range(_Rg&& __rg)
632 if (!std::__is_constant_evaluated())
633 this->_M_invalidate_all();
637 _GLIBCXX26_CONSTEXPR
void
638 pop_front() _GLIBCXX_NOEXCEPT
640 if (!std::__is_constant_evaluated())
642 __glibcxx_check_nonempty();
643 this->_M_invalidate_if(_Equal(_Base::begin()));
648 _GLIBCXX26_CONSTEXPR
void
649 pop_back() _GLIBCXX_NOEXCEPT
651 if (!std::__is_constant_evaluated())
653 __glibcxx_check_nonempty();
654 this->_M_invalidate_if(_Equal(_Base::begin()));
659 _GLIBCXX26_CONSTEXPR iterator
660#if __cplusplus >= 201103L
661 erase(const_iterator __position)
663 erase(iterator __position)
666 if (std::__is_constant_evaluated())
667 return iterator(_Base::erase(__position.
base()),
this);
670#if __cplusplus >= 201103L
671 _Base_const_iterator __victim = __position.
base();
673 _Base_iterator __victim = __position.
base();
675 if (__victim == _Base::begin() || __victim == _Base::end() - 1)
677 this->_M_invalidate_if(_Equal(__victim));
678 return iterator(_Base::erase(__victim),
this);
682 _Base_iterator __res = _Base::erase(__victim);
683 this->_M_invalidate_all();
684 return iterator(__res,
this);
688 _GLIBCXX26_CONSTEXPR iterator
689#if __cplusplus >= 201103L
690 erase(const_iterator __first, const_iterator __last)
692 erase(iterator __first, iterator __last)
695 if (std::__is_constant_evaluated())
696 return iterator(_Base::erase(__first.base(), __last.base()),
this);
702 if (__first.base() == __last.base())
703#if __cplusplus >= 201103L
704 return iterator(__first.base()._M_const_cast(),
this);
708 else if (__first.base() == _Base::begin()
709 || __last.base() == _Base::end())
711 const deque* __this =
this;
712 __this->_M_detach_singular();
713 for (_Base_const_iterator __position = __first.
base();
714 __position != __last.
base(); ++__position)
716 this->_M_invalidate_if(_Equal(__position));
720 return iterator(_Base::erase(__first.base(), __last.base()),
725 __this->_M_revalidate_singular();
726 __throw_exception_again;
731 _Base_iterator __res = _Base::erase(__first.base(),
733 this->_M_invalidate_all();
734 return iterator(__res,
this);
738 _GLIBCXX26_CONSTEXPR
void
742 if (!std::__is_constant_evaluated())
747 _GLIBCXX26_CONSTEXPR
void
748 clear() _GLIBCXX_NOEXCEPT
751 if (!std::__is_constant_evaluated())
752 this->_M_invalidate_all();
755 _GLIBCXX26_CONSTEXPR _Base&
756 _M_base() _GLIBCXX_NOEXCEPT {
return *
this; }
758 _GLIBCXX26_CONSTEXPR
const _Base&
759 _M_base()
const _GLIBCXX_NOEXCEPT {
return *
this; }