_vector.h revision e46c9386c4f79aa40185f79a19fc5b2a7ef528b3
19720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* 29720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 39720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1994 49720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Hewlett-Packard Company 59720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 69720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1996,1997 79720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Silicon Graphics Computer Systems, Inc. 89720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 99720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1997 109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Moscow Center for SPARC Technology 119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Copyright (c) 1999 139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Boris Fomitchev 149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * This material is provided "as is", with absolutely no warranty expressed 169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * or implied. Any use is at your own risk. 179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to use or copy this software for any purpose is hereby granted 199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * without fee, provided the above notices are retained on all copies. 209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Permission to modify the code and to distribute modified code is granted, 219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * provided the above notices are retained, and a notice that the code was 229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * modified is included with the above copyright notice. 239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * 249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block/* NOTE: This is an internal header file, included by other STL headers. 279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * You should not attempt to use it directly. 289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_VECTOR_H 319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_INTERNAL_VECTOR_H 329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALGOBASE_H 349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_algobase.h> 359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ALLOC_H 389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_alloc.h> 399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_ITERATOR_H 429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_iterator.h> 439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#ifndef _STLP_INTERNAL_UNINITIALIZED_H 469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_uninitialized.h> 479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// The vector base class serves one purpose, its constructor and 529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// destructor allocate (but don't initialize) storage. This makes 539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// exception safety easier. 549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_PRIV_NAMESPACE 569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass _Vector_base { 599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Vector_base<_Tp, _Alloc> _Self; 619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FORCE_ALLOCATORS(_Tp, _Alloc) 62e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef _Alloc allocator_type; 639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp* pointer; 649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_alloc_proxy<pointer, _Tp, allocator_type> _AllocProxy; 659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Vector_base(const _Alloc& __a) 679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_start(0), _M_finish(0), _M_end_of_storage(__a, 0) {} 689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Vector_base(size_t __n, const _Alloc& __a) 709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_start(0), _M_finish(0), _M_end_of_storage(__a, 0) { 719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_start = _M_end_of_storage.allocate(__n, __n); 729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_finish = _M_start; 739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_end_of_storage._M_data = _M_start + __n; 749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_MPWFIX_TRY _STLP_MPWFIX_CATCH 759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 77e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Vector_base(__move_source<_Self> src) 799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _M_start(src.get()._M_start), _M_finish(src.get()._M_finish), 809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_end_of_storage(__move_source<_AllocProxy>(src.get()._M_end_of_storage)) { 819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //Set the source as empty: 829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block src.get()._M_finish = src.get()._M_end_of_storage._M_data = src.get()._M_start = 0; 839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 84e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~_Vector_base() { 879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (_M_start != _STLP_DEFAULT_CONSTRUCTED(pointer)) 889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_end_of_storage.deallocate(_M_start, _M_end_of_storage._M_data - _M_start); 899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprotected: 929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _STLP_FUNCTION_THROWS _M_throw_length_error() const; 939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _STLP_FUNCTION_THROWS _M_throw_out_of_range() const; 949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer _M_start; 969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer _M_finish; 979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _AllocProxy _M_end_of_storage; 989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS) 1019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define vector _STLP_PTR_IMPL_NAME(vector) 1029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#elif defined (_STLP_DEBUG) 1039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# define vector _STLP_NON_DBG_NAME(vector) 1049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 1059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 1069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 108e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scotttemplate <class _Tp, _STLP_DFL_TMPL_PARAM(_Alloc, allocator<_Tp>) > 1099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockclass vector : protected _STLP_PRIV _Vector_base<_Tp, _Alloc> 1109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (vector) 1119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block , public __stlport_class<vector<_Tp, _Alloc> > 1129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ 1149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 1159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _STLP_PRIV _Vector_base<_Tp, _Alloc> _Base; 1169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef vector<_Tp, _Alloc> _Self; 1179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_FORCE_ALLOCATORS(_Tp, _Alloc) 1199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _Base::allocator_type allocator_type; 1209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef _Tp value_type; 1229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef value_type* pointer; 1239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const value_type* const_pointer; 1249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef value_type* iterator; 1259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const value_type* const_iterator; 1269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef value_type& reference; 1289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const value_type& const_reference; 1299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef size_t size_type; 1309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef ptrdiff_t difference_type; 1319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef random_access_iterator_tag _Iterator_category; 1329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_DECLARE_RANDOM_ACCESS_REVERSE_ITERATORS; 1349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block allocator_type get_allocator() const 1369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { return _STLP_CONVERT_ALLOCATOR((const allocator_type&)this->_M_end_of_storage, _Tp); } 1379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 139e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_NO_MOVE_SEMANTIC) 1409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef __false_type _Movable; 1419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 1429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // handles insertions on overflow 1449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_overflow_aux(pointer __pos, const _Tp& __x, const __false_type& /*_Movable*/, 1459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __fill_len, bool __atend); 1469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_overflow_aux(pointer __pos, const _Tp& __x, const __true_type& /*_Movable*/, 1479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __fill_len, bool __atend) { 1489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //We need to take care of self referencing here: 1499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (_M_is_inside(__x)) { 1509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block value_type __x_copy = __x; 1519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_overflow_aux(__pos, __x_copy, __false_type(), __fill_len, __atend); 1529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return; 1539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_overflow_aux(__pos, __x, __false_type(), __fill_len, __atend); 1559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_overflow(pointer __pos, const _Tp& __x, const __false_type& /*_TrivialCopy*/, 158e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __fill_len, bool __atend = false) { 159e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 160e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 161e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 162e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_insert_overflow_aux(__pos, __x, _Movable(), __fill_len, __atend); 163e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 1649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_overflow(pointer __pos, const _Tp& __x, const __true_type& /*_TrivialCopy*/, 1659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __fill_len, bool __atend = false); 1669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_check(size_type __n) const { 1679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__n >= size_type(this->_M_finish - this->_M_start)) 1689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_throw_out_of_range(); 1699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 171e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type _M_compute_next_size(size_type __n) { 172e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_type __size = size(); 173e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__n > max_size() - __size) 174e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_throw_length_error(); 175e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __len = __size + (max)(__n, __size); 176e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__len > max_size() || __len < __size) 177e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott __len = max_size(); // overflow 178e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott return __len; 179e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 180e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott 1819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 1829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator begin() { return this->_M_start; } 1839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator begin() const { return this->_M_start; } 1849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator end() { return this->_M_finish; } 1859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator end() const { return this->_M_finish; } 1869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reverse_iterator rbegin() { return reverse_iterator(end()); } 1889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reverse_iterator rbegin() const { return const_reverse_iterator(end()); } 1899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reverse_iterator rend() { return reverse_iterator(begin()); } 1909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reverse_iterator rend() const { return const_reverse_iterator(begin()); } 1919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type size() const { return size_type(this->_M_finish - this->_M_start); } 1939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type max_size() const { 1949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __vector_max_size = size_type(-1) / sizeof(_Tp); 1959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typename allocator_type::size_type __alloc_max_size = this->_M_end_of_storage.max_size(); 1969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (__alloc_max_size < __vector_max_size)?__alloc_max_size:__vector_max_size; 1979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 1989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 1999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type capacity() const { return size_type(this->_M_end_of_storage._M_data - this->_M_start); } 2009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool empty() const { return this->_M_start == this->_M_finish; } 2019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference operator[](size_type __n) { return *(begin() + __n); } 2039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference operator[](size_type __n) const { return *(begin() + __n); } 2049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference front() { return *begin(); } 2069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference front() const { return *begin(); } 2079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference back() { return *(end() - 1); } 2089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference back() const { return *(end() - 1); } 2099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block reference at(size_type __n) { _M_range_check(__n); return (*this)[__n]; } 2119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_reference at(size_type __n) const { _M_range_check(__n); return (*this)[__n]; } 2129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 2149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit vector(const allocator_type& __a = allocator_type()) 2159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector() 2179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(allocator_type()) {} 2189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(const allocator_type& __a) 2199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__a) {} 2219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 2239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 2249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //We always call _M_initialize with only 1 parameter. Default parameter 2259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //is used to allow explicit instanciation of vector with types with no 2269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //default constructor. 2279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_initialize(size_type __n, const _Tp& __val = _STLP_DEFAULT_CONSTRUCTED(_Tp)) 2289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->_M_finish = _STLP_PRIV __uninitialized_init(this->_M_start, __n, __val); } 2299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit vector(size_type __n) 2319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__n, allocator_type()) 2329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_initialize(__n); } 2339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(size_type __n, const _Tp& __val, const allocator_type& __a = allocator_type()) 2349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 2359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block explicit vector(size_type __n) 2369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__n, allocator_type()) 2379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->_M_finish = _STLP_PRIV __uninitialized_init(this->_M_start, __n, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 2389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(size_type __n, const _Tp& __val) 2399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__n, allocator_type()) 2409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->_M_finish = _STLP_PRIV __uninitialized_fill_n(this->_M_start, __n, __val); } 2419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(size_type __n, const _Tp& __val, const allocator_type& __a) 2429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 2439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__n, __a) 2449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { this->_M_finish = _STLP_PRIV __uninitialized_fill_n(this->_M_start, __n, __val); } 2459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(const _Self& __x) 247e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__x.size(), __x.get_allocator()) { 248e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_copy_constructor _TrivialUCopy; 249e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_finish = _STLP_PRIV __ucopy_ptrs(__x.begin(), __x.end(), this->_M_start, _TrivialUCopy()); 250e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 2519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 252e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 2539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(__move_source<_Self> src) 2549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__move_source<_Base>(src.get())) 2559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block {} 256e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 2579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 2599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 2609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 2619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_initialize_aux(_Integer __n, _Integer __val, 2629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_IsIntegral*/) { 263e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __real_n = __n; 2649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = this->_M_end_of_storage.allocate(__n, __real_n); 2659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage._M_data = this->_M_start + __real_n; 2669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = _STLP_PRIV __uninitialized_fill_n(this->_M_start, __n, __val); 2679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 2709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_initialize_aux(_InputIterator __first, _InputIterator __last, 2719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_IsIntegral*/) 2729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_range_initialize(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator)); } 2739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 2759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check whether it's an integral type. If so, it's not an iterator. 2769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 2779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(_InputIterator __first, _InputIterator __last, 2789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a _STLP_ALLOCATOR_TYPE_DFL ) 2799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__a) { 2809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 2819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_initialize_aux(__first, __last, _Integral()); 2829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if defined (_STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS) 2859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 2869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(_InputIterator __first, _InputIterator __last) 2879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block : _STLP_PRIV _Vector_base<_Tp, _Alloc>(allocator_type()) { 2889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 2899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_initialize_aux(__first, __last, _Integral()); 2909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 2919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif /* _STLP_NEEDS_EXTRA_TEMPLATE_CONSTRUCTORS */ 2929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 2939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_MEMBER_TEMPLATES */ 2949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block vector(const _Tp* __first, const _Tp* __last, 2959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const allocator_type& __a = allocator_type()) 296e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott : _STLP_PRIV _Vector_base<_Tp, _Alloc>(__last - __first, __a) { 297e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_copy_constructor _TrivialUCopy; 298e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_finish = _STLP_PRIV __ucopy_ptrs(__first, __last, this->_M_start, _TrivialUCopy()); 299e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 3009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 3019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //As the vector container is a back insert oriented container it 3039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //seems rather logical to destroy elements in reverse order. 3049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ~vector() { _STLP_STD::_Destroy_Range(rbegin(), rend()); } 3059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Self& operator=(const _Self& __x); 3079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void reserve(size_type __n); 3099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // assign(), a generalized assignment member function. Two 3119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // versions: one that takes a count, and one that takes a range. 3129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // The range version is a member template, so we dispatch on whether 3139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // or not the type is an integer. 3149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(size_type __n, const _Tp& __val) { _M_fill_assign(__n, __val); } 3169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_fill_assign(size_type __n, const _Tp& __val); 3179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 3199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIter> 3209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_assign_aux(_ForwardIter __first, _ForwardIter __last, const forward_iterator_tag &) { 3219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 3229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(const_iterator __first, const_iterator __last) { 3239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef const_iterator _ForwardIter; 3249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 325e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott const size_type __len = _STLP_STD::distance(__first, __last); 3269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__len > capacity()) { 3279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n = __len; 3289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __tmp = _M_allocate_and_copy(__n, __first, __last); 3299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_clear(); 3309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_set(__tmp, __tmp + __len, __tmp + __n); 3319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else if (size() >= __len) { 3339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __new_finish = copy(__first, __last, this->_M_start); 3349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__new_finish, this->_M_finish); 3359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __new_finish; 3369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 3389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIter __mid = __first; 339e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::advance(__mid, size()); 340e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::copy(__first, __mid, this->_M_start); 341e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott this->_M_finish = _STLP_STD::uninitialized_copy(__mid, __last, this->_M_finish); 3429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 3469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_assign_aux(_InputIter __first, _InputIter __last, 3489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 3499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __cur = begin(); 3509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last && __cur != end(); ++__cur, ++__first) 3519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block *__cur = *__first; 3529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first == __last) 3539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(__cur, end()); 3549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 3559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(end(), __first, __last); 3569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 3599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_assign_dispatch(_Integer __n, _Integer __val, 3609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type& /*_IsIntegral*/) 3619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_fill_assign(__n, __val); } 3629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIter> 3649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_assign_dispatch(_InputIter __first, _InputIter __last, 3659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type& /*_IsIntegral*/) 3669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_assign_aux(__first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIter)); } 3679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 3699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void assign(_InputIterator __first, _InputIterator __last) { 3709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 3719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_assign_dispatch(__first, __last, _Integral()); 3729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 373e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) && !defined (_STLP_NO_ANACHRONISMS) 3769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_back(const _Tp& __x = _STLP_DEFAULT_CONSTRUCTED(_Tp)) { 3779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 3789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_back(const _Tp& __x) { 379e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (this->_M_finish != this->_M_end_of_storage._M_data) { 3819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _Copy_Construct(this->_M_finish, __x); 3829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++this->_M_finish; 3839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 384e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott else { 385e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_assignment_operator _TrivialCopy; 386e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _M_insert_overflow(this->_M_finish, __x, _TrivialCopy(), 1, true); 387e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 3889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 3899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 3919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator insert(iterator __pos, const _Tp& __x = _STLP_DEFAULT_CONSTRUCTED(_Tp)); 3929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 3939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator insert(iterator __pos, const _Tp& __x); 394e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 3959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 3969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined(_STLP_DONT_SUP_DFLT_PARAM) && !defined(_STLP_NO_ANACHRONISMS) 3979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void push_back() { push_back(_STLP_DEFAULT_CONSTRUCTED(_Tp)); } 3989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator insert(iterator __pos) { return insert(__pos, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 399e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void swap(_Self& __x) { 4029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::swap(this->_M_start, __x._M_start); 4039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::swap(this->_M_finish, __x._M_finish); 4049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage.swap(__x._M_end_of_storage); 4059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 406e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if defined (_STLP_USE_PARTIAL_SPEC_WORKAROUND) && !defined (_STLP_FUNCTION_TMPL_PARTIAL_ORDER) 407e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott void _M_swap_workaround(_Self& __x) { swap(__x); } 408e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 4119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_fill_insert_aux (iterator __pos, size_type __n, const _Tp& __x, const __true_type& /*_Movable*/); 4129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_fill_insert_aux (iterator __pos, size_type __n, const _Tp& __x, const __false_type& /*_Movable*/); 4139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_fill_insert (iterator __pos, size_type __n, const _Tp& __x); 4149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block bool _M_is_inside(const value_type& __x) const { 4169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return (&__x >= this->_M_start && &__x < this->_M_finish); 4179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 4209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIterator> 4219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert_realloc(iterator __pos, 4229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __first, _ForwardIterator __last, 4239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 4249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert_realloc(iterator __pos, 4259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last, 426e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n) { 428e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_copy_constructor _TrivialUCopy; 429e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 430e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 431e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 432e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __len = _M_compute_next_size(__n); 4339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __new_start = this->_M_end_of_storage.allocate(__len, __len); 4349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __new_finish = __new_start; 4359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 4369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_finish = _STLP_PRIV __uninitialized_move(this->_M_start, __pos, __new_start, _TrivialUCopy(), _Movable()); 4379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_finish = uninitialized_copy(__first, __last, __new_finish); 4389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __new_finish = _STLP_PRIV __uninitialized_move(__pos, this->_M_finish, __new_finish, _TrivialUCopy(), _Movable()); 4399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND((_STLP_STD::_Destroy_Range(__new_start,__new_finish), 4419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage.deallocate(__new_start,__len))) 4429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_clear_after_move(); 4439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_set(__new_start, __new_finish, __new_start + __len); 4449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 4479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIterator> 4489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert_aux(iterator __pos, 4499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __first, _ForwardIterator __last, 4509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 4519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert_aux(iterator __pos, 4529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last, 453e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const __true_type& /*_Movable*/) { 4559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __src = this->_M_finish - 1; 4569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __src + __n; 4579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src >= __pos; --__dst, --__src) { 4589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(__dst, *__src); 4599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(__src); 4609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_copy(__first, __last, __pos); 4629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __n; 4639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 4669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIterator> 4679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert_aux(iterator __pos, 4689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __first, _ForwardIterator __last, 4699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 4709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert_aux(iterator __pos, 4719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last, 472e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 4739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block size_type __n, const __false_type& /*_Movable*/) { 474e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_copy_constructor _TrivialUCopy; 475e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_assignment_operator _TrivialCopy; 4769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const size_type __elems_after = this->_M_finish - __pos; 4779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __old_finish = this->_M_finish; 4789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__elems_after > __n) { 4799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy_ptrs(this->_M_finish - __n, this->_M_finish, this->_M_finish, _TrivialUCopy()); 4809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __n; 4819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __copy_backward_ptrs(__pos, __old_finish - __n, __old_finish, _TrivialCopy()); 4829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block copy(__first, __last, __pos); 4839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 4859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined ( _STLP_MEMBER_TEMPLATES ) 4869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __mid = __first; 487e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott _STLP_STD::advance(__mid, __elems_after); 4889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 4899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_pointer __mid = __first + __elems_after; 4909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 4919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_copy(__mid, __last, this->_M_finish); 4929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __n - __elems_after; 4939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __ucopy_ptrs(__pos, __old_finish, this->_M_finish, _TrivialUCopy()); 4949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish += __elems_after; 4959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block copy(__first, __mid, __pos); 4969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } /* elems_after */ 4979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 4989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 4999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 5019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _Integer> 5029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_dispatch(iterator __pos, _Integer __n, _Integer __val, 5039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __true_type&) 5049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_fill_insert(__pos, (size_type) __n, (_Tp) __val); } 5059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 5079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_insert_dispatch(iterator __pos, 5089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIterator __first, _InputIterator __last, 5099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const __false_type&) 5109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_range_insert(__pos, __first, __last, _STLP_ITERATOR_CATEGORY(__first, _InputIterator)); } 5119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 5139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // Check whether it's an integral type. If so, it's not an iterator. 5149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 5159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __pos, _InputIterator __first, _InputIterator __last) { 5169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename _IsIntegral<_InputIterator>::_Ret _Integral; 5179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_insert_dispatch(__pos, __first, __last, _Integral()); 5189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 5219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 5229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert(iterator __pos, 5239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _InputIterator __first, _InputIterator __last, 5249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 5259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first) { 5269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block __pos = insert(__pos, *__first); 5279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block ++__pos; 5289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIterator> 5329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_insert(iterator __pos, 5339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __first, _ForwardIterator __last, 5349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) { 535e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#else 5369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 5379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert(iterator __pos, 5389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_iterator __first, const_iterator __last) { 539e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 540e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 541e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 542e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 5439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block /* This method do not check self referencing. 5449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block * Standard forbids it, checked by the debug mode. 5459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block */ 5469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first != __last) { 547e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __n = _STLP_STD::distance(__first, __last); 5489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (size_type(this->_M_end_of_storage._M_data - this->_M_finish) >= __n) { 5509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_range_insert_aux(__pos, __first, __last, __n, _Movable()); 5519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 5539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _M_range_insert_realloc(__pos, __first, __last, __n); 5549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 5599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void insert (iterator __pos, size_type __n, const _Tp& __x) 5609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { _M_fill_insert(__pos, __n, __x); } 5619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void pop_back() { 5639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block --this->_M_finish; 5649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(this->_M_finish); 5659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 5679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 5689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator _M_erase(iterator __pos, const __true_type& /*_Movable*/) { 5699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(__pos); 5709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __pos, __src = __dst + 1; 5719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __end = end(); 5729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src != __end; ++__dst, ++__src) { 5739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(__dst, *__src); 5749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(__src); 5759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __dst; 5779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __pos; 5789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator _M_erase(iterator __pos, const __false_type& /*_Movable*/) { 580e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott if (__pos + 1 != end()) { 581e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_assignment_operator _TrivialCopy; 5829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_PRIV __copy_ptrs(__pos + 1, this->_M_finish, __pos, _TrivialCopy()); 583e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott } 5849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block --this->_M_finish; 5859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(this->_M_finish); 5869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __pos; 5879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator _M_erase(iterator __first, iterator __last, const __true_type& /*_Movable*/) { 5899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __dst = __first, __src = __last; 5909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator __end = end(); 5919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __dst != __last && __src != __end; ++__dst, ++__src) { 5929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy(__dst); 5939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(__dst, *__src); 5949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 5959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__dst != __last) { 5969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //There is more elements to erase than element to move: 5979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__dst, __last); 5989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(__last, __end); 5999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else { 6019720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block //There is more element to move than element to erase: 6029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for (; __src != __end; ++__dst, ++__src) { 6039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved(__dst); 6049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Move_Construct(__dst, *__src); 6059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(__dst, __end); 6079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __dst; 6099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first; 6109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator _M_erase(iterator __first, iterator __last, const __false_type& /*_Movable*/) { 612e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __type_traits<_Tp>::has_trivial_assignment_operator _TrivialCopy; 6139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __i = _STLP_PRIV __copy_ptrs(__last, this->_M_finish, __first, _TrivialCopy()); 6149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(__i, this->_M_finish); 6159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __i; 6169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first; 6179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockpublic: 6209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator erase(iterator __pos) { 621e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 622e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 623e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 6249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_erase(__pos, _Movable()); 6259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block iterator erase(iterator __first, iterator __last) { 627e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#if !defined (_STLP_NO_MOVE_SEMANTIC) 628e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef typename __move_traits<_Tp>::implemented _Movable; 629e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott#endif 6309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__first == __last) 6319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __first; 6329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return _M_erase(__first, __last, _Movable()); 6339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_DONT_SUP_DFLT_PARAM) 6369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void resize(size_type __new_size, const _Tp& __x = _STLP_DEFAULT_CONSTRUCTED(_Tp)) { 6379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else 6389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void resize(size_type __new_size, const _Tp& __x) { 6399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 6409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block if (__new_size < size()) 6419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(begin() + __new_size, end()); 6429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block else 6439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block insert(end(), __new_size - size(), __x); 6449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DONT_SUP_DFLT_PARAM) 6479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void resize(size_type __new_size) { resize(__new_size, _STLP_DEFAULT_CONSTRUCTED(_Tp)); } 6489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /*_STLP_DONT_SUP_DFLT_PARAM*/ 6499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void clear() { 6519720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block erase(begin(), end()); 6529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6549720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockprivate: 6559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_clear() { 6569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Range(rbegin(), rend()); 6579720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage.deallocate(this->_M_start, this->_M_end_of_storage._M_data - this->_M_start); 6589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_clear_after_move() { 6619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_STD::_Destroy_Moved_Range(rbegin(), rend()); 6629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage.deallocate(this->_M_start, this->_M_end_of_storage._M_data - this->_M_start); 6639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_set(pointer __s, pointer __f, pointer __e) { 6669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = __s; 6679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = __f; 6689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage._M_data = __e; 6699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 6729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIterator> 6739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer _M_allocate_and_copy(size_type& __n, 6749720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _ForwardIterator __first, _ForwardIterator __last) 6759720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#else /* _STLP_MEMBER_TEMPLATES */ 6769720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer _M_allocate_and_copy(size_type& __n, 6779720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const_pointer __first, const_pointer __last) 6789720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 6799720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block { 6809720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block pointer __result = this->_M_end_of_storage.allocate(__n, __n); 6819720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_TRY { 6829720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block uninitialized_copy(__first, __last, __result); 6839720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block return __result; 6849720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6859720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_UNWIND(this->_M_end_of_storage.deallocate(__result, __n)) 6869720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block _STLP_RET_AFTER_THROW(__result) 6879720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6889720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6899720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 6909720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_MEMBER_TEMPLATES) 6919720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _InputIterator> 6929720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_initialize(_InputIterator __first, _InputIterator __last, 6939720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const input_iterator_tag &) { 6949720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block for ( ; __first != __last; ++__first) 6959720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block push_back(*__first); 6969720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 6979720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block // This function is only called by the constructor. 6989720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block template <class _ForwardIterator> 6999720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block void _M_range_initialize(_ForwardIterator __first, _ForwardIterator __last, 7009720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block const forward_iterator_tag &) { 701e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott size_type __n = _STLP_STD::distance(__first, __last); 7029720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_start = this->_M_end_of_storage.allocate(__n, __n); 7039720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_end_of_storage._M_data = this->_M_start + __n; 7049720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block this->_M_finish = uninitialized_copy(__first, __last, this->_M_start); 7059720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block } 7069720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_MEMBER_TEMPLATES */ 7079720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 7089720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7099720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (vector) 7109720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# undef vector 7119720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_MOVE_TO_STD_NAMESPACE 7129720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7139720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7149720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 7159720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7169720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_LINK_TIME_INSTANTIATION) 7179720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_vector.c> 7189720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7199720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7209720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_USE_PTR_SPECIALIZATIONS) 7219720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/pointers/_vector.h> 7229720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7239720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7249720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//We define the bool specialization before the debug interfave 7259720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//to benefit of the debug version of vector even for the bool 7269720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block//specialization. 7279720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_BOOL) || !defined (_STLP_NO_EXTENSIONS) 7289720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_INTERNAL_BVECTOR_H) 7299720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/_bvector.h> 7309720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 7319720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7329720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7339720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_DEBUG) 7349720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# include <stl/debug/_vector.h> 7359720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7369720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7379720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_BEGIN_NAMESPACE 7389720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7399720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if !defined (_STLP_NO_BOOL) && !defined (_STLP_NO_EXTENSIONS) 7409720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// This typedef is non-standard. It is provided for backward compatibility. 7419720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktypedef vector<bool, allocator<bool> > bit_vector; 7429720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif 7439720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7449720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_TEMPLATE_HEADER template <class _Tp, class _Alloc> 7459720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#define _STLP_TEMPLATE_CONTAINER vector<_Tp, _Alloc> 7469720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#include <stl/_relops_cont.h> 7479720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_TEMPLATE_CONTAINER 7489720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#undef _STLP_TEMPLATE_HEADER 7499720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7509720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#if defined (_STLP_CLASS_PARTIAL_SPECIALIZATION) 751e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# if !defined (_STLP_NO_MOVE_SEMANTIC) 7529720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 7539720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct __move_traits<vector<_Tp, _Alloc> > { 754e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott typedef __true_type implemented; 7559720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block typedef typename __move_traits<_Alloc>::complete complete; 7569720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block}; 757e46c9386c4f79aa40185f79a19fc5b2a7ef528b3Patrick Scott# endif 7589720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7599720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# if !defined (_STLP_DEBUG) 7609720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blocktemplate <class _Tp, class _Alloc> 7619720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Blockstruct _DefaultZeroValue<vector<_Tp, _Alloc> > 7629720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block{ typedef typename __type_traits<_Alloc>::has_trivial_default_constructor _Ret; }; 7639720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block# endif 7649720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7659720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_CLASS_PARTIAL_SPECIALIZATION */ 7669720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7679720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block_STLP_END_NAMESPACE 7689720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7699720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block#endif /* _STLP_VECTOR_H */ 7709720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block 7719720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// Local Variables: 7729720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// mode:C++ 7739720d5f59b9c1f5d1b9ecbc9173dbcb71bd557beSteve Block// End: 774