diff options
Diffstat (limited to 'libstdc++-v3/include/bits/stl_vector.h')
-rw-r--r-- | libstdc++-v3/include/bits/stl_vector.h | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index f0ba3328002..10433f9ad13 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -81,7 +81,7 @@ namespace _GLIBCXX_STD _Tp* _M_start; _Tp* _M_finish; _Tp* _M_end_of_storage; - _Vector_impl (_Alloc const& __a) + _Vector_impl(_Alloc const& __a) : _Alloc(__a), _M_start(0), _M_finish(0), _M_end_of_storage(0) { } }; @@ -118,7 +118,8 @@ namespace _GLIBCXX_STD void _M_deallocate(_Tp* __p, size_t __n) - { if (__p) + { + if (__p) _M_impl.deallocate(__p, __n); } }; @@ -198,9 +199,11 @@ namespace _GLIBCXX_STD vector(size_type __n, const value_type& __value, const allocator_type& __a = allocator_type()) : _Base(__n, __a) - { this->_M_impl._M_finish = std::uninitialized_fill_n(this-> - _M_impl._M_start, - __n, __value); } + { + std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, + this->get_allocator()); + this->_M_impl._M_finish = this->_M_impl._M_start + __n; + } /** * @brief Create a %vector with default elements. @@ -212,10 +215,11 @@ namespace _GLIBCXX_STD explicit vector(size_type __n) : _Base(__n, allocator_type()) - { this->_M_impl._M_finish = std::uninitialized_fill_n(this-> - _M_impl._M_start, - __n, - value_type()); } + { + std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, value_type(), + this->get_allocator()); + this->_M_impl._M_finish = this->_M_impl._M_start + __n; + } /** * @brief %Vector copy constructor. @@ -228,10 +232,10 @@ namespace _GLIBCXX_STD */ vector(const vector& __x) : _Base(__x.size(), __x.get_allocator()) - { this->_M_impl._M_finish = std::uninitialized_copy(__x.begin(), - __x.end(), - this-> - _M_impl._M_start); + { this->_M_impl._M_finish = + std::__uninitialized_copy_a(__x.begin(), __x.end(), + this->_M_impl._M_start, + this->get_allocator()); } /** @@ -266,7 +270,9 @@ namespace _GLIBCXX_STD * responsibilty. */ ~vector() - { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish); } + { std::_Destroy(this->_M_impl._M_start, this->_M_impl._M_finish, + this->get_allocator()); + } /** * @brief %Vector assignment operator. @@ -597,7 +603,7 @@ namespace _GLIBCXX_STD { if (this->_M_impl._M_finish != this->_M_impl._M_end_of_storage) { - std::_Construct(this->_M_impl._M_finish, __x); + this->_M_impl.construct(this->_M_impl._M_finish, __x); ++this->_M_impl._M_finish; } else @@ -617,7 +623,7 @@ namespace _GLIBCXX_STD pop_back() { --this->_M_impl._M_finish; - std::_Destroy(this->_M_impl._M_finish); + this->_M_impl.destroy(this->_M_impl._M_finish); } /** @@ -757,7 +763,8 @@ namespace _GLIBCXX_STD pointer __result = this->_M_allocate(__n); try { - std::uninitialized_copy(__first, __last, __result); + std::__uninitialized_copy_a(__first, __last, __result, + this->get_allocator()); return __result; } catch(...) @@ -777,9 +784,9 @@ namespace _GLIBCXX_STD { this->_M_impl._M_start = _M_allocate(__n); this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; - this->_M_impl._M_finish = std::uninitialized_fill_n(this-> - _M_impl._M_start, - __n, __value); + std::__uninitialized_fill_n_a(this->_M_impl._M_start, __n, __value, + this->get_allocator()); + this->_M_impl._M_finish = this->_M_impl._M_end_of_storage; } // Called by the range constructor to implement [23.1.1]/9 @@ -799,7 +806,7 @@ namespace _GLIBCXX_STD _M_range_initialize(_InputIterator __first, _InputIterator __last, input_iterator_tag) { - for ( ; __first != __last; ++__first) + for (; __first != __last; ++__first) push_back(*__first); } @@ -809,12 +816,13 @@ namespace _GLIBCXX_STD _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, forward_iterator_tag) { - size_type __n = std::distance(__first, __last); + const size_type __n = std::distance(__first, __last); this->_M_impl._M_start = this->_M_allocate(__n); this->_M_impl._M_end_of_storage = this->_M_impl._M_start + __n; - this->_M_impl._M_finish = std::uninitialized_copy(__first, __last, - this-> - _M_impl._M_start); + this->_M_impl._M_finish = + std::__uninitialized_copy_a(__first, __last, + this->_M_impl._M_start, + this->get_allocator()); } |