|
template<class _Tp , class _Alloc >
Definition at line 773 of file _deque.c. Referenced by deque< ShellDirectory * >::_M_reserve_map_at_back(), and deque< ShellDirectory * >::_M_reserve_map_at_front(). {
size_type __old_num_nodes = this->_M_finish._M_node - this->_M_start._M_node + 1;
size_type __new_num_nodes = __old_num_nodes + __nodes_to_add;
_Map_pointer __new_nstart;
if (this->_M_map_size._M_data > 2 * __new_num_nodes) {
__new_nstart = this->_M_map._M_data + (this->_M_map_size._M_data - __new_num_nodes) / 2
+ (__add_at_front ? __nodes_to_add : 0);
if (__new_nstart < this->_M_start._M_node)
_STLP_STD::copy(this->_M_start._M_node, this->_M_finish._M_node + 1, __new_nstart);
else
_STLP_STD::copy_backward(this->_M_start._M_node, this->_M_finish._M_node + 1,
__new_nstart + __old_num_nodes);
}
else {
size_type __new_map_size =
this->_M_map_size._M_data + (max)((size_t)this->_M_map_size._M_data, __nodes_to_add) + 2;
_Map_pointer __new_map = this->_M_map.allocate(__new_map_size);
__new_nstart = __new_map + (__new_map_size - __new_num_nodes) / 2
+ (__add_at_front ? __nodes_to_add : 0);
_STLP_STD::copy(this->_M_start._M_node, this->_M_finish._M_node + 1, __new_nstart);
this->_M_map.deallocate(this->_M_map._M_data, this->_M_map_size._M_data);
this->_M_map._M_data = __new_map;
this->_M_map_size._M_data = __new_map_size;
}
this->_M_start._M_set_node(__new_nstart);
this->_M_finish._M_set_node(__new_nstart + __old_num_nodes - 1);
}
|