diff options
author | austern <austern@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-28 16:37:20 +0000 |
---|---|---|
committer | austern <austern@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-07-28 16:37:20 +0000 |
commit | e1d16db9f02de0b077724dcead586362cffa0e5e (patch) | |
tree | 1c1e052f56fe594ac2a2f7349bea7763b2fdca24 /libstdc++-v3/include/bits/deque.tcc | |
parent | 31a3877c6bbad48f75f5a8b6b4fe4e7eed77ab38 (diff) | |
download | gcc-e1d16db9f02de0b077724dcead586362cffa0e5e.tar.gz |
* include/bits/stl_construct.h (_Destroy): New three-argument
overload that takes an allocator argument. Another inline
three-argument overload that takes std::allocator and dispatches
to the two-argument version.
* include/bits/stl_uninitialized.h (__uninitialized_fill_n_aux):
Change return type to void to match uninitialized_fill_n.
(__uninitialized_copy_a_): New function. Like uninitialized_copy
except that it takes an allocator and uses it for construct and
destroy. If the allocator is std::allocator, dispatches to
uninitialized_copy.
(__uninitialized_fill_a): Likewise.
(__uninitialized_fill_n_a): Likewise.
(__uninitialized_copy_copy): Give it an allocator argument.
(__uninitialized_fill_copy): Likewise.
(__uninitialized_copy_fill): Likewise.
* include/bits/deque.tcc: Use new forms defined in stl_construct.h
and stl_uninitialized.h. Replace use of single-argument _Construct
and _Destroy with use of allocator's construct and destroy methods.
* include/bits/list.tcc: Likewise.
* include/bits/stl_deque.h: Likewise.
* include/bits/stl_list.h: Likewise.
* include/bits/stl_tree.h: Likewise.
* include/bits/stl_vector.h: Likewise.
* include/bits/vector.tcc: Likewise.
* include/ext/hashtable.h: Use rebind so that allocator_type
has correct type for a container's allocator. Replace use of
single-argument _Construct and _Destroy with use of allocator's
construct and destroy methods.
* include/ext/memory (__uninitialized_copy_n_a): New function.
Like uninitialized_copy_n except that it takes an extra parameter,
an allocator, and uses it for construct and destroy operations.
* include/ext/rope: Use new forms defined in stl_construct.h,
stl_uninitialized.h, and ext/memory. Replace use of single-argument
_Construct and _Destroy with allocator construct and destroy methods.
* include/ext/ropeimpl.h: Likewise.
* include/ext/slist.h: Likewise.
* testsuite/testsuite_allocator.h (check_construct_destroy): New.
* testsuite/testsuite_allocator.cc (check_construct_destroy): New.
* testsuite/23_containers/deque/check_construct_destroy.cc: New.
* testsuite/23_containers/list/check_construct_destroy.cc: New.
* testsuite/23_containers/set/check_construct_destroy.cc: New.
* testsuite/23_containers/vector/check_construct_destroy.cc: New.
* testsuite/ext/hash_check_construct_destroy.cc: New.
* testsuite/ext/slist_check_construct_destroy.cc: New.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@85265 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libstdc++-v3/include/bits/deque.tcc')
-rw-r--r-- | libstdc++-v3/include/bits/deque.tcc | 101 |
1 files changed, 63 insertions, 38 deletions
diff --git a/libstdc++-v3/include/bits/deque.tcc b/libstdc++-v3/include/bits/deque.tcc index dda81bf1c02..6b87c3b6ba6 100644 --- a/libstdc++-v3/include/bits/deque.tcc +++ b/libstdc++-v3/include/bits/deque.tcc @@ -146,7 +146,8 @@ namespace _GLIBCXX_STD { std::copy_backward(this->_M_impl._M_start, __first, __last); iterator __new_start = this->_M_impl._M_start + __n; - std::_Destroy(this->_M_impl._M_start, __new_start); + std::_Destroy(this->_M_impl._M_start, __new_start, + this->get_allocator()); _M_destroy_nodes(this->_M_impl._M_start._M_node, __new_start._M_node); this->_M_impl._M_start = __new_start; @@ -155,7 +156,8 @@ namespace _GLIBCXX_STD { std::copy(__last, this->_M_impl._M_finish, __first); iterator __new_finish = this->_M_impl._M_finish - __n; - std::_Destroy(__new_finish, this->_M_impl._M_finish); + std::_Destroy(__new_finish, this->_M_impl._M_finish, + this->get_allocator()); _M_destroy_nodes(__new_finish._M_node + 1, this->_M_impl._M_finish._M_node + 1); this->_M_impl._M_finish = __new_finish; @@ -173,21 +175,25 @@ namespace _GLIBCXX_STD __node < this->_M_impl._M_finish._M_node; ++__node) { - std::_Destroy(*__node, *__node + _S_buffer_size()); + std::_Destroy(*__node, *__node + _S_buffer_size(), + this->get_allocator()); _M_deallocate_node(*__node); } if (this->_M_impl._M_start._M_node != this->_M_impl._M_finish._M_node) { std::_Destroy(this->_M_impl._M_start._M_cur, - this->_M_impl._M_start._M_last); + this->_M_impl._M_start._M_last, + this->get_allocator()); std::_Destroy(this->_M_impl._M_finish._M_first, - this->_M_impl._M_finish._M_cur); + this->_M_impl._M_finish._M_cur, + this->get_allocator()); _M_deallocate_node(this->_M_impl._M_finish._M_first); } else std::_Destroy(this->_M_impl._M_start._M_cur, - this->_M_impl._M_finish._M_cur); + this->_M_impl._M_finish._M_cur, + this->get_allocator()); this->_M_impl._M_finish = this->_M_impl._M_start; } @@ -218,7 +224,9 @@ namespace _GLIBCXX_STD iterator __new_start = _M_reserve_elements_at_front(__n); try { - std::uninitialized_fill(__new_start, this->_M_impl._M_start, __x); + std::__uninitialized_fill_a(__new_start, this->_M_impl._M_start, + __x, + this->get_allocator()); this->_M_impl._M_start = __new_start; } catch(...) @@ -233,8 +241,9 @@ namespace _GLIBCXX_STD iterator __new_finish = _M_reserve_elements_at_back(__n); try { - std::uninitialized_fill(this->_M_impl._M_finish, - __new_finish, __x); + std::__uninitialized_fill_a(this->_M_impl._M_finish, + __new_finish, __x, + this->get_allocator()); this->_M_impl._M_finish = __new_finish; } catch(...) @@ -259,14 +268,17 @@ namespace _GLIBCXX_STD for (__cur = this->_M_impl._M_start._M_node; __cur < this->_M_impl._M_finish._M_node; ++__cur) - std::uninitialized_fill(*__cur, *__cur + _S_buffer_size(), __value); - std::uninitialized_fill(this->_M_impl._M_finish._M_first, - this->_M_impl._M_finish._M_cur, - __value); + std::__uninitialized_fill_a(*__cur, *__cur + _S_buffer_size(), __value, + this->get_allocator()); + std::__uninitialized_fill_a(this->_M_impl._M_finish._M_first, + this->_M_impl._M_finish._M_cur, + __value, + this->get_allocator()); } catch(...) { - std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur)); + std::_Destroy(this->_M_impl._M_start, iterator(*__cur, __cur), + this->get_allocator()); __throw_exception_again; } } @@ -310,16 +322,19 @@ namespace _GLIBCXX_STD { _ForwardIterator __mid = __first; std::advance(__mid, _S_buffer_size()); - std::uninitialized_copy(__first, __mid, *__cur_node); + std::__uninitialized_copy_a(__first, __mid, *__cur_node, + this->get_allocator()); __first = __mid; } - std::uninitialized_copy(__first, __last, - this->_M_impl._M_finish._M_first); + std::__uninitialized_copy_a(__first, __last, + this->_M_impl._M_finish._M_first, + this->get_allocator()); } catch(...) { std::_Destroy(this->_M_impl._M_start, - iterator(*__cur_node, __cur_node)); + iterator(*__cur_node, __cur_node), + this->get_allocator()); __throw_exception_again; } } @@ -335,7 +350,7 @@ namespace _GLIBCXX_STD *(this->_M_impl._M_finish._M_node + 1) = this->_M_allocate_node(); try { - std::_Construct(this->_M_impl._M_finish._M_cur, __t_copy); + this->_M_impl.construct(this->_M_impl._M_finish._M_cur, __t_copy); 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_first; @@ -361,7 +376,7 @@ namespace _GLIBCXX_STD 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_last - 1; - std::_Construct(this->_M_impl._M_start._M_cur, __t_copy); + this->_M_impl.construct(this->_M_impl._M_start._M_cur, __t_copy); } catch(...) { @@ -379,7 +394,7 @@ namespace _GLIBCXX_STD _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); + this->_M_impl.destroy(this->_M_impl._M_finish._M_cur); } // Called only if _M_impl._M_start._M_cur == _M_impl._M_start._M_last - 1. @@ -391,7 +406,7 @@ namespace _GLIBCXX_STD void deque<_Tp, _Alloc>:: _M_pop_front_aux() { - std::_Destroy(this->_M_impl._M_start._M_cur); + this->_M_impl.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; @@ -420,7 +435,8 @@ namespace _GLIBCXX_STD iterator __new_start = _M_reserve_elements_at_front(__n); try { - std::uninitialized_copy(__first, __last, __new_start); + std::__uninitialized_copy_a(__first, __last, __new_start, + this->get_allocator()); this->_M_impl._M_start = __new_start; } catch(...) @@ -435,8 +451,9 @@ namespace _GLIBCXX_STD iterator __new_finish = _M_reserve_elements_at_back(__n); try { - std::uninitialized_copy(__first, __last, - this->_M_impl._M_finish); + std::__uninitialized_copy_a(__first, __last, + this->_M_impl._M_finish, + this->get_allocator()); this->_M_impl._M_finish = __new_finish; } catch(...) @@ -502,8 +519,9 @@ namespace _GLIBCXX_STD { iterator __start_n = (this->_M_impl._M_start + difference_type(__n)); - std::uninitialized_copy(this->_M_impl._M_start, __start_n, - __new_start); + std::__uninitialized_copy_a(this->_M_impl._M_start, __start_n, + __new_start, + this->get_allocator()); this->_M_impl._M_start = __new_start; std::copy(__start_n, __pos, __old_start); fill(__pos - difference_type(__n), __pos, __x_copy); @@ -513,7 +531,8 @@ namespace _GLIBCXX_STD std::__uninitialized_copy_fill(this->_M_impl._M_start, __pos, __new_start, this->_M_impl._M_start, - __x_copy); + __x_copy, + this->get_allocator()); this->_M_impl._M_start = __new_start; std::fill(__old_start, __pos, __x_copy); } @@ -538,8 +557,9 @@ namespace _GLIBCXX_STD { 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); + std::__uninitialized_copy_a(__finish_n, this->_M_impl._M_finish, + this->_M_impl._M_finish, + this->get_allocator()); this->_M_impl._M_finish = __new_finish; std::copy_backward(__pos, __finish_n, __old_finish); std::fill(__pos, __pos + difference_type(__n), __x_copy); @@ -549,7 +569,8 @@ namespace _GLIBCXX_STD 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, + this->get_allocator()); this->_M_impl._M_finish = __new_finish; std::fill(__pos, __old_finish, __x_copy); } @@ -584,8 +605,9 @@ namespace _GLIBCXX_STD { iterator __start_n = (this->_M_impl._M_start + difference_type(__n)); - std::uninitialized_copy(this->_M_impl._M_start, __start_n, - __new_start); + std::__uninitialized_copy_a(this->_M_impl._M_start, __start_n, + __new_start, + this->get_allocator()); this->_M_impl._M_start = __new_start; std::copy(__start_n, __pos, __old_start); std::copy(__first, __last, __pos - difference_type(__n)); @@ -596,7 +618,8 @@ namespace _GLIBCXX_STD std::advance(__mid, difference_type(__n) - __elemsbefore); std::__uninitialized_copy_copy(this->_M_impl._M_start, __pos, __first, __mid, - __new_start); + __new_start, + this->get_allocator()); this->_M_impl._M_start = __new_start; std::copy(__mid, __last, __old_start); } @@ -621,9 +644,10 @@ namespace _GLIBCXX_STD { 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); + std::__uninitialized_copy_a(__finish_n, + this->_M_impl._M_finish, + this->_M_impl._M_finish, + this->get_allocator()); this->_M_impl._M_finish = __new_finish; std::copy_backward(__pos, __finish_n, __old_finish); std::copy(__first, __last, __pos); @@ -634,7 +658,8 @@ namespace _GLIBCXX_STD 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, + this->get_allocator()); this->_M_impl._M_finish = __new_finish; std::copy(__first, __mid, __pos); } |