⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 _deque.h

📁 symbian 上的stl_port进过编译的。
💻 H
📖 第 1 页 / 共 3 页
字号:
      push_back(__x);      iterator __tmp = this->_M_finish;      --__tmp;      return __tmp;    }    else {      return _M_fill_insert_aux(__pos, 1, __x, _Movable());    }  }#if defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS)  iterator insert(iterator __pos)  { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }#endif /*_STLP_DONT_SUP_DFLT_PARAM && !_STLP_NO_ANACHRONISMS*/  void insert(iterator __pos, size_type __n, const value_type& __x)  { _M_fill_insert(__pos, __n, __x); }protected:  iterator _M_fill_insert_aux(iterator __pos, size_type __n, const value_type& __x, const __true_type& /*_Movable*/);  iterator _M_fill_insert_aux(iterator __pos, size_type __n, const value_type& __x, const __false_type& /*_Movable*/);  void _M_fill_insert(iterator __pos, size_type __n, const value_type& __x);#if defined (_STLP_MEMBER_TEMPLATES)  template <class _Integer>  void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __x,                          const __true_type& /*_IsIntegral*/) {    _M_fill_insert(__pos, (size_type) __n, (value_type) __x);  }  template <class _InputIterator>  void _M_insert_dispatch(iterator __pos,                          _InputIterator __first, _InputIterator __last,                          const __false_type& /*_IsIntegral*/) {    _M_insert(__pos, __first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator));  }public:  // Check whether it's an integral type.  If so, it's not an iterator.  template <class _InputIterator>  void insert(iterator __pos, _InputIterator __first, _InputIterator __last) {    typedef typename _IsIntegral<_InputIterator>::_Ret _Integral;    _M_insert_dispatch(__pos, __first, __last, _Integral());  }#else /* _STLP_MEMBER_TEMPLATES */  void _M_insert_range_aux(iterator __pos,                           const value_type* __first, const value_type* __last,                           size_type __n, const __true_type& /*_Movable*/);  void _M_insert_range_aux(iterator __pos,                           const value_type* __first, const value_type* __last,                           size_type __n, const __false_type& /*_Movable*/);  void _M_insert_range_aux(iterator __pos,                           const_iterator __first, const_iterator __last,                           size_type __n, const __true_type& /*_Movable*/);  void _M_insert_range_aux(iterator __pos,                           const_iterator __first, const_iterator __last,                           size_type __n, const __false_type& /*_Movable*/);public:  void insert(iterator __pos,              const value_type* __first, const value_type* __last);  void insert(iterator __pos,              const_iterator __first, const_iterator __last);#endif /* _STLP_MEMBER_TEMPLATES */public:#if !defined(_STLP_DONT_SUP_DFLT_PARAM)  void resize(size_type __new_size,              const value_type& __x = _STLP_DEFAULT_CONSTRUCTED(_Tp)) {#else  void resize(size_type __new_size, const value_type& __x) {#endif /*_STLP_DONT_SUP_DFLT_PARAM*/    const size_type __len = size();    if (__new_size < __len)      erase(this->_M_start + __new_size, this->_M_finish);    else      insert(this->_M_finish, __new_size - __len, __x);  }#if defined (_STLP_DONT_SUP_DFLT_PARAM)  void resize(size_type __new_size)  { resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); }#endif /*_STLP_DONT_SUP_DFLT_PARAM*/protected:  iterator _M_erase(iterator __pos, const __true_type& /*_Movable*/);  iterator _M_erase(iterator __pos, const __false_type& /*_Movable*/);  iterator _M_erase(iterator __first, iterator __last, const __true_type& /*_Movable*/);  iterator _M_erase(iterator __first, iterator __last, const __false_type& /*_Movable*/);public:                         // Erase  iterator erase(iterator __pos) {    return _M_erase(__pos, _Movable());  }  iterator erase(iterator __first, iterator __last) {    if (__first == this->_M_start && __last == this->_M_finish) {      clear();      return this->_M_finish;    }    else {      if (__first == __last)        return __first;      return _M_erase(__first, __last, _Movable());    }  }  void clear();protected:                        // Internal construction/destruction  void _M_fill_initialize(const value_type& __val, const __true_type& /*_TrivialInit*/)  {}  void _M_fill_initialize(const value_type& __val, const __false_type& /*_TrivialInit*/);#if defined (_STLP_MEMBER_TEMPLATES)  template <class _InputIterator>  void _M_range_initialize(_InputIterator __first, _InputIterator __last,                           const input_iterator_tag &) {    this->_M_initialize_map(0);    _STLP_TRY {      for ( ; __first != __last; ++__first)        push_back(*__first);    }    _STLP_UNWIND(clear())  }  template <class _ForwardIterator>  void  _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last,                            const forward_iterator_tag &)  {   size_type __n = distance(__first, __last);   this->_M_initialize_map(__n);   _Map_pointer __cur_node = this->_M_start._M_node;   _STLP_TRY {    for (; __cur_node < this->_M_finish._M_node; ++__cur_node) {      _ForwardIterator __mid = __first;      advance(__mid, this->buffer_size());      uninitialized_copy(__first, __mid, *__cur_node);      __first = __mid;    }    uninitialized_copy(__first, __last, this->_M_finish._M_first);   }  _STLP_UNWIND(_STLP_STD::_Destroy_Range(this->_M_start, iterator(*__cur_node, __cur_node))) }#endif /* _STLP_MEMBER_TEMPLATES */protected:                        // Internal push_* and pop_*  void _M_push_back_aux_v(const value_type&);  void _M_push_front_aux_v(const value_type&);#if defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS)  void _M_push_back_aux();  void _M_push_front_aux();#endif /*_STLP_DONT_SUP_DFLT_PARAM !_STLP_NO_ANACHRONISMS*/  void _M_pop_back_aux();  void _M_pop_front_aux();protected:                        // Internal insert functions#if defined (_STLP_MEMBER_TEMPLATES)  template <class _InputIterator>  void _M_insert(iterator __pos,                _InputIterator __first,                _InputIterator __last,                const input_iterator_tag &) {    copy(__first, __last, inserter(*this, __pos));  }  template <class _ForwardIterator>  void  _M_insert(iterator __pos,                  _ForwardIterator __first, _ForwardIterator __last,                  const forward_iterator_tag &) {    size_type __n = distance(__first, __last);    if (__pos._M_cur == this->_M_start._M_cur) {      iterator __new_start = _M_reserve_elements_at_front(__n);      _STLP_TRY {        uninitialized_copy(__first, __last, __new_start);        this->_M_start = __new_start;      }      _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node))    }    else if (__pos._M_cur == this->_M_finish._M_cur) {      iterator __new_finish = _M_reserve_elements_at_back(__n);      _STLP_TRY {        uninitialized_copy(__first, __last, this->_M_finish);        this->_M_finish = __new_finish;      }      _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1))    }    else      _M_insert_range_aux(__pos, __first, __last, __n, _Movable());  }  template <class _ForwardIterator>  void _M_insert_range_aux(iterator __pos,                           _ForwardIterator __first, _ForwardIterator __last,                           size_type __n, const __true_type& /*_Movable*/) {    const difference_type __elemsbefore = __pos - this->_M_start;    size_type __length = size();    if (__elemsbefore <= difference_type(__length / 2)) {      iterator __new_start = _M_reserve_elements_at_front(__n);      __pos = this->_M_start + __elemsbefore;      _STLP_TRY {        iterator __dst = __new_start;        iterator __src = this->_M_start;        for (; __src != __pos; ++__dst, ++__src) {          _STLP_STD::_Move_Construct(&(*__dst), *__src);          _STLP_STD::_Destroy_Moved(&(*__src));        }        this->_M_start = __new_start;        uninitialized_copy(__first, __last, __dst);      }      _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node))    }    else {      iterator __new_finish = _M_reserve_elements_at_back(__n);      const difference_type __elemsafter = difference_type(__length) - __elemsbefore;      __pos = this->_M_finish - __elemsafter;      _STLP_TRY {        iterator __dst = __new_finish;        iterator __src = this->_M_finish;        for (--__src, --__dst; __src >= __pos; --__src, --__dst) {          _STLP_STD::_Move_Construct(&(*__dst), *__src);          _STLP_STD::_Destroy_Moved(&(*__src));        }        this->_M_finish = __new_finish;        uninitialized_copy(__first, __last, __pos);      }      _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1))    }  }  template <class _ForwardIterator>  void _M_insert_range_aux(iterator __pos,                           _ForwardIterator __first, _ForwardIterator __last,                           size_type __n, const __false_type& /*_Movable*/) {    const difference_type __elemsbefore = __pos - this->_M_start;    size_type __length = size();    if (__elemsbefore <= difference_type(__length / 2)) {      iterator __new_start = _M_reserve_elements_at_front(__n);      iterator __old_start = this->_M_start;      __pos = this->_M_start + __elemsbefore;      _STLP_TRY {        if (__elemsbefore >= difference_type(__n)) {          iterator __start_n = this->_M_start + difference_type(__n);          uninitialized_copy(this->_M_start, __start_n, __new_start);          this->_M_start = __new_start;          copy(__start_n, __pos, __old_start);          copy(__first, __last, __pos - difference_type(__n));        }        else {          _ForwardIterator __mid = __first;          advance(__mid, difference_type(__n) - __elemsbefore);          _STLP_PRIV __uninitialized_copy_copy(this->_M_start, __pos, __first, __mid, __new_start);          this->_M_start = __new_start;          copy(__mid, __last, __old_start);        }      }      _STLP_UNWIND(this->_M_destroy_nodes(__new_start._M_node, this->_M_start._M_node))    }    else {      iterator __new_finish = _M_reserve_elements_at_back(__n);      iterator __old_finish = this->_M_finish;      const difference_type __elemsafter = difference_type(__length) - __elemsbefore;      __pos = this->_M_finish - __elemsafter;      _STLP_TRY {        if (__elemsafter > difference_type(__n)) {          iterator __finish_n = this->_M_finish - difference_type(__n);          uninitialized_copy(__finish_n, this->_M_finish, this->_M_finish);          this->_M_finish = __new_finish;          copy_backward(__pos, __finish_n, __old_finish);          copy(__first, __last, __pos);        }        else {          _ForwardIterator __mid = __first;          advance(__mid, __elemsafter);          _STLP_PRIV __uninitialized_copy_copy(__mid, __last, __pos, this->_M_finish, this->_M_finish);          this->_M_finish = __new_finish;          copy(__first, __mid, __pos);        }      }      _STLP_UNWIND(this->_M_destroy_nodes(this->_M_finish._M_node + 1, __new_finish._M_node + 1))    }  }#endif /* _STLP_MEMBER_TEMPLATES */  iterator _M_reserve_elements_at_front(size_type __n) {    size_type __vacancies = this->_M_start._M_cur - this->_M_start._M_first;    if (__n > __vacancies)      _M_new_elements_at_front(__n - __vacancies);    return this->_M_start - difference_type(__n);  }  iterator _M_reserve_elements_at_back(size_type __n) {    size_type __vacancies = (this->_M_finish._M_last - this->_M_finish._M_cur) - 1;    if (__n > __vacancies)      _M_new_elements_at_back(__n - __vacancies);    return this->_M_finish + difference_type(__n);  }  void _M_new_elements_at_front(size_type __new_elements);  void _M_new_elements_at_back(size_type __new_elements);protected:                      // Allocation of _M_map and nodes  // Makes sure the _M_map has space for new nodes.  Does not actually  //  add the nodes.  Can invalidate _M_map pointers.  (And consequently,  //  deque iterators.)  void _M_reserve_map_at_back (size_type __nodes_to_add = 1) {    if (__nodes_to_add + 1 > this->_M_map_size._M_data - (this->_M_finish._M_node - this->_M_map._M_data))      _M_reallocate_map(__nodes_to_add, false);  }  void _M_reserve_map_at_front (size_type __nodes_to_add = 1) {    if (__nodes_to_add > size_type(this->_M_start._M_node - this->_M_map._M_data))      _M_reallocate_map(__nodes_to_add, true);  }  void _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front);};#if defined (deque)#  undef deque_STLP_MOVE_TO_STD_NAMESPACE#endif_STLP_END_NAMESPACE#if !defined (_STLP_LINK_TIME_INSTANTIATION)#  include <stl/_deque.c>#endif#if defined (_STLP_USE_PTR_SPECIALIZATIONS)#  include <stl/pointers/_deque.h>#endif#if defined (_STLP_DEBUG)#  include <stl/debug/_deque.h>#endif_STLP_BEGIN_NAMESPACE#define _STLP_TEMPLATE_CONTAINER deque<_Tp, _Alloc>#define _STLP_TEMPLATE_HEADER    template <class _Tp, class _Alloc>#include <stl/_relops_cont.h>#undef _STLP_TEMPLATE_CONTAINER#undef _STLP_TEMPLATE_HEADER#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION)template <class _Tp, class _Alloc>struct __move_traits<deque<_Tp, _Alloc> > {  typedef __stlp_movable implemented;  typedef typename __move_traits<_Alloc>::complete complete;};#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */_STLP_END_NAMESPACE#endif /* _STLP_INTERNAL_DEQUE_H */// Local Variables:// mode:C++// End:

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -