X-Git-Url: http://git.sourceforge.jp/view?a=blobdiff_plain;f=libstdc%2B%2B-v3%2Finclude%2Fbits%2Fstl_vector.h;h=a81c5974d997f5729a7175ecd75480b837d86e19;hb=ab0da02967f3464e1794430d4a07d752035e8b26;hp=731806b0a9482f119d5a678b9c11b6881766995f;hpb=a67a968a3bdbaf19b8abe3062cd5532ddc08b42e;p=pf3gnuchains%2Fgcc-fork.git diff --git a/libstdc++-v3/include/bits/stl_vector.h b/libstdc++-v3/include/bits/stl_vector.h index 731806b0a94..a81c5974d99 100644 --- a/libstdc++-v3/include/bits/stl_vector.h +++ b/libstdc++-v3/include/bits/stl_vector.h @@ -1,6 +1,7 @@ // Vector implementation -*- C++ -*- -// Copyright (C) 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. +// Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 +// Free Software Foundation, Inc. // // This file is part of the GNU ISO C++ Library. This library is free // software; you can redistribute it and/or modify it under the @@ -65,8 +66,8 @@ #include #include -namespace _GLIBCXX_STD -{ +_GLIBCXX_BEGIN_NESTED_NAMESPACE(std, _GLIBCXX_STD) + /** * @if maint * See bits/stl_deque.h's _Deque_base for an explanation. @@ -101,7 +102,7 @@ namespace _GLIBCXX_STD allocator_type get_allocator() const - { return _M_get_Tp_allocator(); } + { return allocator_type(_M_get_Tp_allocator()); } _Vector_base(const allocator_type& __a) : _M_impl(__a) @@ -182,11 +183,6 @@ namespace _GLIBCXX_STD typedef _Alloc allocator_type; protected: - /** @if maint - * These two functions and three data members are all from the - * base class. They should be pretty self-explanatory, as - * %vector uses a simple contiguous allocation scheme. @endif - */ using _Base::_M_allocate; using _Base::_M_deallocate; using _Base::_M_impl; @@ -403,7 +399,7 @@ namespace _GLIBCXX_STD /** Returns the size() of the largest possible %vector. */ size_type max_size() const - { return size_type(-1) / sizeof(value_type); } + { return _M_get_Tp_allocator().max_size(); } /** * @brief Resizes the %vector to the specified number of elements. @@ -735,6 +731,11 @@ namespace _GLIBCXX_STD std::swap(this->_M_impl._M_finish, __x._M_impl._M_finish); std::swap(this->_M_impl._M_end_of_storage, __x._M_impl._M_end_of_storage); + + // _GLIBCXX_RESOLVE_LIB_DEFECTS + // 431. Swapping containers with unequal allocators. + std::__alloc_swap<_Tp_alloc_type>::_S_do_it(_M_get_Tp_allocator(), + __x._M_get_Tp_allocator()); } /** @@ -985,6 +986,7 @@ namespace _GLIBCXX_STD inline void swap(vector<_Tp, _Alloc>& __x, vector<_Tp, _Alloc>& __y) { __x.swap(__y); } -} // namespace std + +_GLIBCXX_END_NESTED_NAMESPACE #endif /* _VECTOR_H */