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

📄 deque.tcc

📁 openRisc2000编译链接器等,用于i386 cygwin
💻 TCC
📖 第 1 页 / 共 2 页
字号:
  // Called only if _M_impl._M_finish._M_cur == _M_impl._M_finish._M_first.  template <typename _Tp, typename _Alloc>    void deque<_Tp,_Alloc>::    _M_pop_back_aux()    {      _M_deallocate_node(this->_M_impl._M_finish._M_first);      this->_M_impl._M_finish._M_set_node(this->_M_impl._M_finish._M_node - 1);      this->_M_impl._M_finish._M_cur = this->_M_impl._M_finish._M_last - 1;      std::_Destroy(this->_M_impl._M_finish._M_cur);    }  // Called only if _M_impl._M_start._M_cur == _M_impl._M_start._M_last - 1.  Note that  // if the deque has at least one element (a precondition for this member  // function), and if _M_impl._M_start._M_cur == _M_impl._M_start._M_last, then the deque  // must have at least two nodes.  template <typename _Tp, typename _Alloc>    void deque<_Tp,_Alloc>::    _M_pop_front_aux()    {      std::_Destroy(this->_M_impl._M_start._M_cur);      _M_deallocate_node(this->_M_impl._M_start._M_first);      this->_M_impl._M_start._M_set_node(this->_M_impl._M_start._M_node + 1);      this->_M_impl._M_start._M_cur = this->_M_impl._M_start._M_first;    }  template <typename _Tp, typename _Alloc>    template <typename _InputIterator>      void      deque<_Tp,_Alloc>::      _M_range_insert_aux(iterator __pos,                          _InputIterator __first, _InputIterator __last,                          input_iterator_tag)      { std::copy(__first, __last, std::inserter(*this, __pos)); }  template <typename _Tp, typename _Alloc>    template <typename _ForwardIterator>      void      deque<_Tp,_Alloc>::      _M_range_insert_aux(iterator __pos,                          _ForwardIterator __first, _ForwardIterator __last,                          forward_iterator_tag)      {        size_type __n = std::distance(__first, __last);        if (__pos._M_cur == this->_M_impl._M_start._M_cur)	  {	    iterator __new_start = _M_reserve_elements_at_front(__n);	    try	      {		std::uninitialized_copy(__first, __last, __new_start);		this->_M_impl._M_start = __new_start;	      }	    catch(...)	      {		_M_destroy_nodes(__new_start._M_node, this->_M_impl._M_start._M_node);		__throw_exception_again;	      }	  }        else if (__pos._M_cur == this->_M_impl._M_finish._M_cur)	  {	    iterator __new_finish = _M_reserve_elements_at_back(__n);	    try	      {		std::uninitialized_copy(__first, __last, this->_M_impl._M_finish);		this->_M_impl._M_finish = __new_finish;	      }	    catch(...)	      {		_M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,				 __new_finish._M_node + 1);		__throw_exception_again;	      }	  }        else          _M_insert_aux(__pos, __first, __last, __n);      }  template <typename _Tp, typename _Alloc>    typename deque<_Tp, _Alloc>::iterator    deque<_Tp,_Alloc>::    _M_insert_aux(iterator __pos, const value_type& __x)    {      difference_type __index = __pos - this->_M_impl._M_start;      value_type __x_copy = __x; // XXX copy      if (static_cast<size_type>(__index) < size() / 2)	{	  push_front(front());	  iterator __front1 = this->_M_impl._M_start;	  ++__front1;	  iterator __front2 = __front1;	  ++__front2;	  __pos = this->_M_impl._M_start + __index;	  iterator __pos1 = __pos;	  ++__pos1;	  std::copy(__front2, __pos1, __front1);	}      else	{	  push_back(back());	  iterator __back1 = this->_M_impl._M_finish;	  --__back1;	  iterator __back2 = __back1;	  --__back2;	  __pos = this->_M_impl._M_start + __index;	  std::copy_backward(__pos, __back2, __back1);	}      *__pos = __x_copy;      return __pos;    }  template <typename _Tp, typename _Alloc>    void    deque<_Tp,_Alloc>::    _M_insert_aux(iterator __pos, size_type __n, const value_type& __x)    {      const difference_type __elems_before = __pos - this->_M_impl._M_start;      size_type __length = this->size();      value_type __x_copy = __x;      if (__elems_before < difference_type(__length / 2))	{	  iterator __new_start = _M_reserve_elements_at_front(__n);	  iterator __old_start = this->_M_impl._M_start;	  __pos = this->_M_impl._M_start + __elems_before;	  try	    {	      if (__elems_before >= difference_type(__n))		{		  iterator __start_n = this->_M_impl._M_start + difference_type(__n);		  std::uninitialized_copy(this->_M_impl._M_start, __start_n,					  __new_start);		  this->_M_impl._M_start = __new_start;		  std::copy(__start_n, __pos, __old_start);		  fill(__pos - difference_type(__n), __pos, __x_copy);		}	      else		{		  std::__uninitialized_copy_fill(this->_M_impl._M_start, __pos,						 __new_start,						 this->_M_impl._M_start, __x_copy);		  this->_M_impl._M_start = __new_start;		  std::fill(__old_start, __pos, __x_copy);		}	    }	  catch(...)	    {	      _M_destroy_nodes(__new_start._M_node, this->_M_impl._M_start._M_node);	      __throw_exception_again;	    }	}      else	{	  iterator __new_finish = _M_reserve_elements_at_back(__n);	  iterator __old_finish = this->_M_impl._M_finish;	  const difference_type __elems_after =	    difference_type(__length) - __elems_before;	  __pos = this->_M_impl._M_finish - __elems_after;	  try	    {	      if (__elems_after > difference_type(__n))		{		  iterator __finish_n = this->_M_impl._M_finish - difference_type(__n);		  std::uninitialized_copy(__finish_n, this->_M_impl._M_finish,					  this->_M_impl._M_finish);		  this->_M_impl._M_finish = __new_finish;		  std::copy_backward(__pos, __finish_n, __old_finish);		  std::fill(__pos, __pos + difference_type(__n), __x_copy);		}	      else		{		  std::__uninitialized_fill_copy(this->_M_impl._M_finish,						 __pos + difference_type(__n),						 __x_copy, __pos,						 this->_M_impl._M_finish);		  this->_M_impl._M_finish = __new_finish;		  std::fill(__pos, __old_finish, __x_copy);		}	    }	  catch(...)	    {	      _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,			       __new_finish._M_node + 1);	      __throw_exception_again;	    }	}    }  template <typename _Tp, typename _Alloc>    template <typename _ForwardIterator>      void      deque<_Tp,_Alloc>::      _M_insert_aux(iterator __pos,                    _ForwardIterator __first, _ForwardIterator __last,                    size_type __n)      {        const difference_type __elemsbefore = __pos - this->_M_impl._M_start;        size_type __length = size();        if (static_cast<size_type>(__elemsbefore) < __length / 2)	  {	    iterator __new_start = _M_reserve_elements_at_front(__n);	    iterator __old_start = this->_M_impl._M_start;	    __pos = this->_M_impl._M_start + __elemsbefore;	    try	      {		if (__elemsbefore >= difference_type(__n))		  {		    iterator __start_n = this->_M_impl._M_start + difference_type(__n);		    std::uninitialized_copy(this->_M_impl._M_start, __start_n,					    __new_start);		    this->_M_impl._M_start = __new_start;		    std::copy(__start_n, __pos, __old_start);		    std::copy(__first, __last, __pos - difference_type(__n));		  }		else		  {		    _ForwardIterator __mid = __first;		    std::advance(__mid, difference_type(__n) - __elemsbefore);		    std::__uninitialized_copy_copy(this->_M_impl._M_start, __pos,						   __first, __mid, __new_start);		    this->_M_impl._M_start = __new_start;		    std::copy(__mid, __last, __old_start);		  }	      }	    catch(...)	      {		_M_destroy_nodes(__new_start._M_node, this->_M_impl._M_start._M_node);		__throw_exception_again;	      }	  }        else        {          iterator __new_finish = _M_reserve_elements_at_back(__n);          iterator __old_finish = this->_M_impl._M_finish;          const difference_type __elemsafter =            difference_type(__length) - __elemsbefore;          __pos = this->_M_impl._M_finish - __elemsafter;          try            {              if (__elemsafter > difference_type(__n))		{		  iterator __finish_n = this->_M_impl._M_finish - difference_type(__n);		  std::uninitialized_copy(__finish_n,					  this->_M_impl._M_finish,					  this->_M_impl._M_finish);		  this->_M_impl._M_finish = __new_finish;		  std::copy_backward(__pos, __finish_n, __old_finish);		  std::copy(__first, __last, __pos);		}              else		{		  _ForwardIterator __mid = __first;		  std::advance(__mid, __elemsafter);		  std::__uninitialized_copy_copy(__mid, __last, __pos,						 this->_M_impl._M_finish,						 this->_M_impl._M_finish);		  this->_M_impl._M_finish = __new_finish;		  std::copy(__first, __mid, __pos);		}            }          catch(...)            {              _M_destroy_nodes(this->_M_impl._M_finish._M_node + 1,			       __new_finish._M_node + 1);              __throw_exception_again;            }        }      }  template <typename _Tp, typename _Alloc>    void    deque<_Tp,_Alloc>::    _M_new_elements_at_front(size_type __new_elems)    {      size_type __new_nodes	= (__new_elems + _S_buffer_size() - 1) / _S_buffer_size();      _M_reserve_map_at_front(__new_nodes);      size_type __i;      try        {          for (__i = 1; __i <= __new_nodes; ++__i)            *(this->_M_impl._M_start._M_node - __i) = this->_M_allocate_node();        }      catch(...)        {          for (size_type __j = 1; __j < __i; ++__j)            _M_deallocate_node(*(this->_M_impl._M_start._M_node - __j));          __throw_exception_again;        }    }  template <typename _Tp, typename _Alloc>    void    deque<_Tp,_Alloc>::    _M_new_elements_at_back(size_type __new_elems)    {      size_type __new_nodes          = (__new_elems + _S_buffer_size() - 1) / _S_buffer_size();      _M_reserve_map_at_back(__new_nodes);      size_type __i;      try        {          for (__i = 1; __i <= __new_nodes; ++__i)            *(this->_M_impl._M_finish._M_node + __i) = this->_M_allocate_node();        }      catch(...)        {          for (size_type __j = 1; __j < __i; ++__j)            _M_deallocate_node(*(this->_M_impl._M_finish._M_node + __j));          __throw_exception_again;        }    }  template <typename _Tp, typename _Alloc>    void    deque<_Tp,_Alloc>::    _M_reallocate_map(size_type __nodes_to_add, bool __add_at_front)    {      size_type __old_num_nodes	= this->_M_impl._M_finish._M_node - this->_M_impl._M_start._M_node + 1;      size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;      _Map_pointer __new_nstart;      if (this->_M_impl._M_map_size > 2 * __new_num_nodes)	{	  __new_nstart = this->_M_impl._M_map + (this->_M_impl._M_map_size					 - __new_num_nodes) / 2	                 + (__add_at_front ? __nodes_to_add : 0);	  if (__new_nstart < this->_M_impl._M_start._M_node)	    std::copy(this->_M_impl._M_start._M_node,		    this->_M_impl._M_finish._M_node + 1,		    __new_nstart);	  else	    std::copy_backward(this->_M_impl._M_start._M_node,			       this->_M_impl._M_finish._M_node + 1,			       __new_nstart + __old_num_nodes);	}      else	{	  size_type __new_map_size = this->_M_impl._M_map_size	                             + std::max(this->_M_impl._M_map_size,						__nodes_to_add) + 2;	  _Map_pointer __new_map = this->_M_allocate_map(__new_map_size);	  __new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2	                 + (__add_at_front ? __nodes_to_add : 0);	  std::copy(this->_M_impl._M_start._M_node,		    this->_M_impl._M_finish._M_node + 1,		    __new_nstart);	  _M_deallocate_map(this->_M_impl._M_map, this->_M_impl._M_map_size);	  this->_M_impl._M_map = __new_map;	  this->_M_impl._M_map_size = __new_map_size;	}      this->_M_impl._M_start._M_set_node(__new_nstart);      this->_M_impl._M_finish._M_set_node(__new_nstart + __old_num_nodes - 1);    }} // namespace std#endif

⌨️ 快捷键说明

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