31 #define _PPL_CONTAINER
33 #if !(defined (_M_X64) || defined (_M_IX86) || defined (_M_ARM) || defined (_M_ARM64))
34 #error ERROR: Concurrency Runtime is supported only on X64, X86, ARM, and ARM64 architectures.
38 #error ERROR: Concurrency Runtime is not supported when compiling /clr.
41 #pragma pack(push,_CRT_PACKING)
42 #pragma warning (push)
43 #pragma warning (disable: 4510 4512 4610) // disable warnings for compiler unable to generate constructor
44 #pragma push_macro("new")
55 template<
typename _Ty,
class _Ax = std::allocator<_Ty> >
62 #define _BAD_ALLOC_MARKER reinterpret_cast<void*>(63)
101 _My_storage[_I]._My_array =
NULL;
141 _Size_type
_Internal_grow_segment(
const _Size_type _Start, _Size_type _Finish, _Size_type _Element_size,
_Segment_t** _PPSegment, _Size_type* _PSegStart, _Size_type* _PSegFinish );
176 template<
typename _Container,
typename _Value>
189 template<
typename _C,
typename _Ty>
192 template<
typename _C,
typename _Ty,
typename _U>
195 template<
typename _C,
typename _Ty,
typename _U>
198 template<
typename _C,
typename _Ty,
typename _U>
201 template<
typename _C,
typename _U>
202 friend class ::Concurrency::details::_Vector_iterator;
204 template<
typename _Ty,
class _Ax>
205 friend class ::Concurrency::concurrent_vector;
208 : _My_vector(const_cast<_Container*>(&_Vec)),
210 _My_item(static_cast<
_Value*>(_Ptr))
222 : _My_vector(_Other._My_vector),
223 _My_index(_Other._My_index),
224 _My_item(_Other._My_item)
252 _Item = _My_item = &_My_vector->_Internal_subscript(_My_index);
253 _CONCRT_ASSERT( _Item==&_My_vector->_Internal_subscript(_My_index));
258 return _My_vector->_Internal_subscript(_My_index+_K);
272 if( (_K& (_K-2))==0 )
289 size_t _K = _My_index--;
293 if( (_K& (_K-2))==0 )
331 template<
typename _Container,
typename _Value>
337 template<
typename _Container,
typename _Ty>
343 template<
typename _Container,
typename _Ty,
typename _U>
349 template<
typename _Container,
typename _Ty,
typename _U>
355 template<
typename _Container,
typename _Ty,
typename _U>
358 return _I.
_My_index<_J._My_index && _I._My_vector == _J._My_vector;
361 template<
typename _Container,
typename _Ty,
typename _U>
367 template<
typename _Container,
typename _Ty,
typename _U>
373 template<
typename _Container,
typename _Ty,
typename _U>
379 template<
typename _Container,
typename _Ty,
typename _U>
385 template<
typename _Ty,
class _Ax>
389 typedef typename _Ax::template
423 template<
typename _Ty,
class _Ax>
424 class concurrent_vector:
protected details::_Allocator_base<_Ty, _Ax>,
425 private details::_Concurrent_vector_base_v4
430 template<
typename _C,
typename _U>
614 _Concurrent_vector_base_v4::_Internal_swap(_Vector._Internal_vector_base());
702 template<
class _InputIterator>
722 if(
this != &_Vector )
743 if( static_cast<void*>(
this ) != static_cast<const void*>( &_Vector ) )
745 _Concurrent_vector_base_v4::_Internal_assign(_Vector._Internal_vector_base(),
763 if( static_cast<void*>(
this ) != static_cast<const void*>( &_Vector ) )
765 _Concurrent_vector_base_v4::_Internal_swap(_Vector._Internal_vector_base());
805 iterator
grow_by( size_type _Delta, const_reference _Item )
936 reference
at( size_type _Index )
961 const_reference
at( size_type _Index )
const
982 return _Cp < _Sz ? _Cp : _Sz;
1209 const_reverse_iterator
rend()
const
1224 return (((
const _Myt *)
this)->
begin());
1237 return (((
const _Myt *)
this)->
end());
1250 return (((
const _Myt *)
this)->
rbegin());
1263 return (((
const _Myt *)
this)->
rend());
1277 return static_cast<_Ty*
>(
_My_segment[0]._My_array)[0];
1291 return static_cast<_Ty*
>(
_My_segment[0]._My_array)[0];
1352 void assign(size_type _N, const_reference _Item)
1377 template<
class _InputIterator>
1378 void assign(_InputIterator _Begin, _InputIterator _End)
1393 if(
this != &_Vector )
1395 _Concurrent_vector_base_v4::_Internal_swap(static_cast<_Concurrent_vector_base_v4&>(_Vector));
1465 static void __cdecl
_Initialize_array(
void* _Begin,
const void*, size_type _N );
1471 static void __cdecl
_Copy_array(
void* _Dst,
const void* _Src, size_type _N );
1474 static void __cdecl
_Assign_array(
void* _Dst,
const void* _Src, size_type _N );
1477 static void __cdecl
_Destroy_array(
void* _Begin, size_type _N );
1487 : _My_array(static_cast<pointer>(_Ptr)), _N(_NTrials), _I(0)
1493 for(; _I <
_N; ++
_I)
1494 new( &_My_array[_I] ) _Ty();
1498 for(; _I <
_N; ++
_I)
1499 new( &_My_array[_I] ) _Ty(*static_cast<const _Ty*>(_Src));
1503 for(; _I <
_N; ++
_I)
1504 new( &_My_array[_I] ) _Ty(static_cast<const _Ty*>(_Src)[_I]);
1508 for(; _I <
_N; ++
_I)
1509 _My_array[_I] = static_cast<const _Ty*>(_Src)[
_I];
1513 for(; _I <
_N; ++
_I, ++_Src)
1514 new( &_My_array[_I] ) _Ty( *_Src );
1519 std::memset(_My_array+_I, 0, (_N-_I)*
sizeof(value_type));
1535 template<
typename _Ty,
class _Ax>
1541 if( _Internal_compact(
sizeof(_Ty), &_Old, &_Destroy_array, &_Copy_array ) )
1552 template<
typename _Ty,
class _Ax>
1556 while( _K > _First_block )
1559 _Ty* _Array =
static_cast<_Ty*
>(_Table[_K]);
1562 this->_My_allocator.deallocate( _Array, _Segment_size(_K) );
1564 _Ty* _Array =
static_cast<_Ty*
>(_Table[0]);
1569 _Table[--_K] =
NULL;
1570 this->_My_allocator.deallocate( _Array, _Segment_size(_First_block) );
1574 template<
typename _Ty,
class _Ax>
1578 size_type _J = _Index;
1582 _Ty* _Array =
static_cast<_Ty*
>(_My_segment[_K]._My_array);
1588 template<
typename _Ty,
class _Ax>
1591 if( _Index >= _My_early_size )
1592 _Internal_throw_exception(0);
1593 size_type _J = _Index;
1595 if( _My_segment == (
_Segment_t*)_My_storage && _K >= _Pointers_per_short_table )
1596 _Internal_throw_exception(1);
1597 void *_Array = _My_segment[_K]._My_array;
1599 _Internal_throw_exception(2);
1600 return static_cast<_Ty*
>(_Array)[_J];
1603 template<
typename _Ty,
class _Ax>
1609 _Internal_reserve(_N,
sizeof(_Ty), max_size());
1610 _My_early_size = _N;
1612 _Size_type _Sz = _Segment_size( _My_first_block );
1615 _Initialize_array_by(static_cast<_Ty*>(_My_segment[_K]._My_array), static_cast<const void*>(&_Item), _Sz);
1619 _K = _My_first_block;
1626 _Initialize_array_by(static_cast<_Ty*>(_My_segment[_K]._My_array), static_cast<const void*>(&_Item), _N);
1629 template<
typename _Ty,
class _Ax>
template<
class _I>
1635 _Internal_reserve(_N,
sizeof(_Ty), max_size());
1636 _My_early_size = _N;
1638 _Size_type _Sz = _Segment_size( _My_first_block );
1646 _K = _My_first_block;
1658 template<
typename _Ty,
class _Ax>
1664 template<
typename _Ty,
class _Ax>
1670 template<
typename _Ty,
class _Ax>
1675 template<
typename _Ty,
class _Ax>
1681 #pragma warning(push)
1682 #pragma warning(disable: 4189)
1684 template<
typename _Ty,
class _Ax>
1687 _Ty* _Array =
static_cast<_Ty*
>(_Begin);
1688 for( size_type _J=_N; _J>0; --_J )
1689 _Array[_J-1].~_Ty();
1692 #pragma warning(pop)
1726 template<
typename _Ty,
class A1,
class A2>
1730 if(_A.size() != _B.size())
1734 for(; _I != _A.end(); ++_I, ++_J)
1773 template<
typename _Ty,
class A1,
class A2>
1811 template<
typename _Ty,
class A1,
class A2>
1849 template<
typename _Ty,
class A1,
class A2>
1887 template<
typename _Ty,
class A1,
class A2>
1925 template<
typename _Ty,
class A1,
class A2>
1961 template<
typename _Ty,
class _Ax>
1971 #pragma pop_macro("new")
1972 #pragma warning (pop)
void _Internal_grow(_Size_type _Start, _Size_type _Finish, _Size_type _Element_size, _My_internal_array_op2 _Init, const void *_Src)
reference operator[](size_type _Index)
Provides access to the element at the given index in the concurrent vector. This method is concurrenc...
Definition: concurrent_vector.h:888
const_reverse_iterator rend() const
Returns an iterator of type reverse_iterator or const_reverse_iterator to the end of the concurrent...
Definition: concurrent_vector.h:1209
_CONCRTIMP _Size_type _Internal_grow_to_at_least_with_result(_Size_type _New_size, _Size_type _Element_size, _My_internal_array_op2 _Init, const void *_Src)
void(__cdecl * _My_internal_array_op2)(void *_Dst, const void *_Src, _Size_type _N)
Definition: concurrent_vector.h:129
Definition: xtr1common:22
_Vector_iterator operator++(int)
Definition: concurrent_vector.h:307
void *__cdecl * _My_vector_allocator_ptr(_Concurrent_vector_base_v4 &, size_t)
_CONCRTIMP _Size_type _Internal_capacity() const
concurrent_vector(const concurrent_vector &_Vector)
Constructs a concurrent vector.
Definition: concurrent_vector.h:552
_Vector_iterator operator+(ptrdiff_t _Offset) const
Definition: concurrent_vector.h:228
static _CONCRTIMP _Segment_index_t __cdecl _Segment_index_of(_Size_type _Index)
const ::Concurrency::details::_Concurrent_vector_base_v4 & _Internal_vector_base() const
Definition: concurrent_vector.h:1425
size_t _Size_type
Definition: concurrent_vector.h:71
iterator push_back(_Ty &&_Item)
Appends the given item to the end of the concurrent vector. This method is concurrency-safe.
Definition: concurrent_vector.h:862
const_reference front() const
Returns a reference or a const reference to the first element in the concurrent vector. If the concurrent vector is empty, the return value is undefined. This method is concurrency-safe.
Definition: concurrent_vector.h:1288
_Vector_iterator(const _Vector_iterator< _Container, typename _Container::value_type > &_Other)
Definition: concurrent_vector.h:221
#define NULL
Definition: vcruntime.h:236
~_Internal_loop_guide()
Definition: concurrent_vector.h:1516
_Value & operator*() const
Definition: concurrent_vector.h:248
_Vector_iterator & operator-=(ptrdiff_t _Offset)
Definition: concurrent_vector.h:242
concurrent_vector(const allocator_type &_Al=allocator_type())
Constructs a concurrent vector.
Definition: concurrent_vector.h:528
_Value * operator->() const
Definition: concurrent_vector.h:260
_Value value_type
Definition: concurrent_vector.h:325
void _Internal_truncate(_Size_type _Old_size, _Size_type _New_size, _Size_type _Element_size, _My_internal_array_op1 _Destroy)
_Vector_iterator()
Definition: concurrent_vector.h:216
void _Assign(const void *_Src)
Definition: concurrent_vector.h:1506
std::enable_if< details::_Is_extent_or_index< _Tuple_type< _Rank > >::value, bool >::type operator==(const _Tuple_type< _Rank > &_Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU
Definition: amp.h:822
~concurrent_vector()
Erases all elements and destroys this concurrent vector.
Definition: concurrent_vector.h:1418
Definition: concurrent_vector.h:65
_Value * pointer
Definition: concurrent_vector.h:326
reverse_iterator rend()
Returns an iterator of type reverse_iterator or const_reverse_iterator to the end of the concurrent...
Definition: concurrent_vector.h:1181
const _Ty * const_pointer
A type that provides a pointer to a const element in a concurrent vector.
Definition: concurrent_vector.h:482
_CONCRTIMP void _Internal_throw_exception(_Size_type) const
_Allocator_base(const _Allocator_type &_Al)
Definition: concurrent_vector.h:398
void _Init()
Definition: concurrent_vector.h:1491
#define _CONCRT_ASSERT(x)
Definition: concrt.h:123
bool operator==(const _Concurrent_queue_iterator< _C, _Ty > &_I, const _Concurrent_queue_iterator< _C, _U > &_J)
Definition: concurrent_queue.h:318
concurrent_vector(size_type _N, const_reference _Item, const allocator_type &_Al=allocator_type())
Constructs a concurrent vector.
Definition: concurrent_vector.h:668
_Vector_iterator(const _Container &_Vec, size_t _Index, void *_Ptr=NULL)
Definition: concurrent_vector.h:207
_CONCRTIMP _Size_type _Internal_grow_by(_Size_type _Delta, _Size_type _Element_size, _My_internal_array_op2 _Init, const void *_Src)
iterator grow_to_at_least(size_type _N)
Grows this concurrent vector until it has at least _N elements. This method is concurrency-safe.
Definition: concurrent_vector.h:821
size_type capacity() const
Returns the maximum size to which the concurrent vector can grow without having to allocate more memo...
Definition: concurrent_vector.h:1008
ptrdiff_t difference_type
A type that provides the signed distance between two elements in a concurrent vector.
Definition: concurrent_vector.h:457
reference at(size_type _Index)
Provides access to the element at the given index in the concurrent vector. This method is concurrenc...
Definition: concurrent_vector.h:936
void swap(concurrent_vector< _Ty, _Ax > &_A, concurrent_vector< _Ty, _Ax > &_B)
Exchanges the elements of two concurrent_vector objects.
Definition: concurrent_vector.h:1962
static _Size_type _Segment_size(_Segment_index_t _K)
Definition: concurrent_vector.h:120
_In_ int _Val
Definition: vcruntime_string.h:62
size_type _I
Definition: concurrent_vector.h:1485
details::_Vector_iterator< concurrent_vector, _Ty > iterator
A type that provides a random-access iterator that can read any element in a concurrent vector...
Definition: concurrent_vector.h:489
The Concurrency namespace provides classes and functions that provide access to the Concurrency Runti...
Definition: agents.h:43
static _Segment_index_t _Segment_base_index_of(_Segment_index_t &_Index)
Definition: concurrent_vector.h:113
Definition: concurrent_vector.h:1447
void swap(concurrent_vector &_Vector)
Swaps the contents of two concurrent vectors. This method is not concurrency-safe.
Definition: concurrent_vector.h:1391
void _Internal_assign(_I _First, _I _Last, _Is_integer_tag< true > *)
Definition: concurrent_vector.h:1451
Definition: concurrent_vector.h:177
friend ptrdiff_t operator-(const _Vector_iterator< _C, _Ty > &, const _Vector_iterator< _C, _U > &)
int ptrdiff_t
Definition: vcruntime.h:199
_Ty & reference
A type that provides a reference to an element stored in a concurrent vector.
Definition: concurrent_vector.h:463
_Internal_loop_guide(size_type _NTrials, void *_Ptr)
Definition: concurrent_vector.h:1486
void * _My_array
Definition: concurrent_vector.h:83
const pointer _My_array
Definition: concurrent_vector.h:1483
iterator grow_by(size_type _Delta)
Grows this concurrent vector by _Delta elements. This method is concurrency-safe.
Definition: concurrent_vector.h:784
static void __cdecl _Initialize_array(void *_Begin, const void *, size_type _N)
Definition: concurrent_vector.h:1659
static const _Segment_index_t _Pointers_per_long_table
Definition: concurrent_vector.h:78
void assign(size_type _N, const_reference _Item)
Erases the elements of the concurrent vector and assigns to it either _N copies of _Item ...
Definition: concurrent_vector.h:1352
details::_Allocator_base< _Ty, _Ax >::_Allocator_type allocator_type
A type that represents the allocator class for the concurrent vector.
Definition: concurrent_vector.h:445
void _Copy(const void *_Src)
Definition: concurrent_vector.h:1501
_Container * _My_vector
Definition: concurrent_vector.h:180
_Vector_iterator & operator--()
Definition: concurrent_vector.h:286
_CONCRTIMP void * _Internal_push_back(_Size_type _Element_size, _Size_type &_Index)
concurrent_vector(concurrent_vector &&_Vector)
Constructs a concurrent vector.
Definition: concurrent_vector.h:610
void _Init(const void *_Src)
Definition: concurrent_vector.h:1496
const _Ty & const_reference
A type that provides a reference to a const element stored in a concurrent vector for reading and per...
Definition: concurrent_vector.h:470
_Iter_diff_t< _InIt > distance(_InIt _First, _InIt _Last)
Definition: xutility:1124
concurrent_vector(size_type _N)
Constructs a concurrent vector.
Definition: concurrent_vector.h:635
_CONCRTIMP ~_Concurrent_vector_base_v4()
static void __cdecl _Initialize_array_by(void *_Begin, const void *_Src, size_type _N)
Definition: concurrent_vector.h:1665
size_type max_size() const
Returns the maximum number of elements the concurrent vector can hold. This method is concurrency-saf...
Definition: concurrent_vector.h:1097
Definition: concurrent_vector.h:132
void shrink_to_fit()
Compacts the internal representation of the concurrent vector to reduce fragmentation and optimize me...
Definition: concurrent_vector.h:1536
_Allocator_base()
Definition: concurrent_vector.h:393
reference back()
Returns a reference or a const reference to the last element in the concurrent vector. If the concurrent vector is empty, the return value is undefined. This method is concurrency-safe.
Definition: concurrent_vector.h:1302
reverse_iterator rbegin()
Returns an iterator of type reverse_iterator or const_reverse_iterator to the beginning of the conc...
Definition: concurrent_vector.h:1167
concurrent_vector< _Ty, _Ax > _Myt
Definition: concurrent_vector.h:428
size_t _Segment_index_t
Definition: concurrent_vector.h:70
_Vector_iterator & operator++()
Definition: concurrent_vector.h:266
_Value & operator[](ptrdiff_t _K) const
Definition: concurrent_vector.h:256
concurrent_vector & operator=(const concurrent_vector &_Vector)
Assigns the contents of another concurrent_vector object to this one. This method is not concurrency-...
Definition: concurrent_vector.h:720
unsigned int size_t
Definition: sourceannotations.h:19
void resize(size_type _N, const _Ty &_Val)
Changes the size of the concurrent vector to the requested size, deleting or adding elements as neces...
Definition: concurrent_vector.h:1085
_Ty & _Internal_subscript_with_exceptions(size_type _Index) const
Definition: concurrent_vector.h:1589
void internal_assign_iterators(_I _First, _I _Last)
Definition: concurrent_vector.h:1630
const_reference at(size_type _Index) const
Provides access to the element at the given index in the concurrent vector. This method is concurrenc...
Definition: concurrent_vector.h:961
_Size_type _Internal_grow_segment(const _Size_type _Start, _Size_type _Finish, _Size_type _Element_size, _Segment_t **_PPSegment, _Size_type *_PSegStart, _Size_type *_PSegFinish)
_CONCRTIMP void _Internal_copy(const _Concurrent_vector_base_v4 &_Src, _Size_type _Element_size, _My_internal_array_op2 _Copy)
_Subatomic< _Size_type > _My_early_size
Definition: concurrent_vector.h:160
void * _Table[_Pointers_per_long_table]
Definition: concurrent_vector.h:135
_CONCRTIMP void _Internal_assign(const _Concurrent_vector_base_v4 &_Src, _Size_type _Element_size, _My_internal_array_op1 _Destroy, _My_internal_array_op2 _Assign, _My_internal_array_op2 _Copy)
iterator begin()
Returns an iterator of type iterator or const_iterator to the beginning of the concurrent vector...
Definition: concurrent_vector.h:1111
const_iterator cend() const
Returns an iterator of type const_iterator to the end of the concurrent vector. This method is concu...
Definition: concurrent_vector.h:1235
std::reverse_iterator< const_iterator > const_reverse_iterator
A type that provides a random-access iterator that can read any const element in the concurrent vecto...
Definition: concurrent_vector.h:508
_Value * _My_item
Definition: concurrent_vector.h:187
static void __cdecl _Assign_array(void *_Dst, const void *_Src, size_type _N)
Definition: concurrent_vector.h:1676
_Concurrent_vector_base_v4 _Concurrent_vector_base
Definition: concurrent_vector.h:172
_CONCRTIMP _Segment_index_t _Internal_clear(_My_internal_array_op1 _Destroy)
::Concurrency::details::_Concurrent_vector_base_v4 & _Internal_vector_base()
Definition: concurrent_vector.h:1426
The concurrent_vector class is a sequence container class that allows random access to any element...
Definition: concurrent_vector.h:56
_Vector_iterator operator--(int)
Definition: concurrent_vector.h:315
void assign(_InputIterator _Begin, _InputIterator _End)
Erases the elements of the concurrent vector and assigns to it either _N copies of _Item ...
Definition: concurrent_vector.h:1378
_Concurrent_vector_base_v4()
Definition: concurrent_vector.h:96
void resize(size_type _N)
Changes the size of the concurrent vector to the requested size, deleting or adding elements as neces...
Definition: concurrent_vector.h:1060
_Vector_iterator< _Container, _Ty > operator+(ptrdiff_t _Offset, const _Vector_iterator< _Container, _Ty > &_Vec)
Definition: concurrent_vector.h:338
void(__cdecl * _My_internal_array_op1)(void *_Begin, _Size_type _N)
Definition: concurrent_vector.h:126
static void __cdecl _Copy_array(void *_Dst, const void *_Src, size_type _N)
Definition: concurrent_vector.h:1671
static void *__cdecl _Internal_allocator(::Concurrency::details::_Concurrent_vector_base_v4 &_Vb, size_t _K)
Definition: concurrent_vector.h:1430
iterator push_back(const_reference _Item)
Appends the given item to the end of the concurrent vector. This method is concurrency-safe.
Definition: concurrent_vector.h:843
static _Segment_index_t _Segment_base(_Segment_index_t _K)
Definition: concurrent_vector.h:108
_Vector_iterator & operator+=(ptrdiff_t _Offset)
Definition: concurrent_vector.h:232
const_reverse_iterator rbegin() const
Returns an iterator of type reverse_iterator or const_reverse_iterator to the beginning the concurr...
Definition: concurrent_vector.h:1195
static const _Segment_index_t _Default_initial_segments
Definition: concurrent_vector.h:74
_CONCRTIMP void * _Internal_compact(_Size_type _Element_size, void *_Table, _My_internal_array_op1 _Destroy, _My_internal_array_op2 _Copy)
Definition: concurrent_vector.h:1480
static const _Segment_index_t _Pointers_per_short_table
Definition: concurrent_vector.h:77
_Subatomic< _Size_type > _My_first_block
Definition: concurrent_vector.h:157
_Ty value_type
A type that represents the data type stored in a concurrent vector.
Definition: concurrent_vector.h:451
details::_Vector_iterator< concurrent_vector, const _Ty > const_iterator
A type that provides a random-access iterator that can read a const element in a concurrent vector...
Definition: concurrent_vector.h:495
const_iterator end() const
Returns an iterator of type iterator or const_iterator to the end of the concurrent vector...
Definition: concurrent_vector.h:1153
_Segment_t _My_storage[_Pointers_per_short_table]
Definition: concurrent_vector.h:92
size_t _My_index
Definition: concurrent_vector.h:183
Definition: concurrent_vector.h:81
void _Iterate(_It &_Src)
Definition: concurrent_vector.h:1511
void _Internal_free_segments(void *_Table[], _Segment_index_t _K, _Segment_index_t _First_block)
Definition: concurrent_vector.h:1553
void _Internal_assign(_I _First, _I _Last, _Is_integer_tag< false > *)
Definition: concurrent_vector.h:1457
friend _Vector_iterator< _C, _Ty > operator+(ptrdiff_t _Offset, const _Vector_iterator< _C, _Ty > &_Vec)
_Vector_iterator operator-(ptrdiff_t _Offset) const
Definition: concurrent_vector.h:238
std::enable_if< details::_Is_extent_or_index< _Tuple_type< _Rank > >::value, bool >::type operator!=(const _Tuple_type< _Rank > &_Lhs, const _Tuple_type< _Rank > &_Rhs) __GPU
Definition: amp.h:829
const_iterator cbegin() const
Returns an iterator of type const_iterator to the beginning of the concurrent vector. This method is concurrency-safe.
Definition: concurrent_vector.h:1222
const size_type _N
Definition: concurrent_vector.h:1484
#define _CONCRTIMP
Definition: crtdefs.h:48
const_reverse_iterator crbegin() const
Returns an iterator of type const_reverse_iterator to the beginning of the concurrent vector...
Definition: concurrent_vector.h:1248
constexpr remove_reference< _Ty >::type && move(_Ty &&_Arg) _NOEXCEPT
Definition: type_traits:1290
const_reference back() const
Returns a reference or a const reference to the last element in the concurrent_vector. If the concurrent vector is empty, the return value is undefined. This method is concurrency-safe.
Definition: concurrent_vector.h:1317
bool operator>=(const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B)
Tests if the concurrent_vector object on the left side of the operator is greater than or equal to th...
Definition: concurrent_vector.h:1926
const_iterator begin() const
Returns an iterator of type iterator or const_iterator to the beginning of the concurrent vector...
Definition: concurrent_vector.h:1139
void reserve(size_type _N)
Allocates enough space to grow the concurrent vector to size _N without having to allocate more memo...
Definition: concurrent_vector.h:1026
Definition: concurrent_vector.h:386
const_reverse_iterator crend() const
Returns an iterator of type const_reverse_iterator to the end of the concurrent vector. This method is concurrency-safe.
Definition: concurrent_vector.h:1261
_Ty & _Internal_subscript(size_type _Index) const
Definition: concurrent_vector.h:1575
#define _BAD_ALLOC_MARKER
Definition: concurrent_vector.h:62
void operator=(const _Internal_loop_guide &)
ptrdiff_t difference_type
Definition: concurrent_vector.h:324
_CRT_BEGIN_C_HEADER typedef void(__CRTDECL *unexpected_handler)()
_Value & reference
Definition: concurrent_vector.h:327
void _Destroy(_Ptrty _Ptr)
Definition: xmemory0:287
details::_Concurrent_vector_base_v4::_Size_type size_type
A type that counts the number of elements in a concurrent vector.
Definition: concurrent_vector.h:439
bool operator>=(const _Vector_iterator< _Container, _Ty > &_I, const _Vector_iterator< _Container, _U > &_J)
Definition: concurrent_vector.h:368
bool operator>(const _Vector_iterator< _Container, _Ty > &_I, const _Vector_iterator< _Container, _U > &_J)
Definition: concurrent_vector.h:362
concurrent_vector & operator=(concurrent_vector &&_Vector)
Assigns the contents of another concurrent_vector object to this one. This method is not concurrency-...
Definition: concurrent_vector.h:761
concurrent_vector(const concurrent_vector< _Ty, M > &_Vector, const allocator_type &_Al=allocator_type())
Constructs a concurrent vector.
Definition: concurrent_vector.h:584
concurrent_vector & operator=(const concurrent_vector< _Ty, M > &_Vector)
Assigns the contents of another concurrent_vector object to this one. This method is not concurrency-...
Definition: concurrent_vector.h:741
friend bool operator==(const _Vector_iterator< _C, _Ty > &, const _Vector_iterator< _C, _U > &)
bool operator!=(const _Concurrent_queue_iterator< _C, _Ty > &_I, const _Concurrent_queue_iterator< _C, _U > &_J)
Definition: concurrent_queue.h:324
allocator_type get_allocator() const
Returns a copy of the allocator used to construct the concurrent vector. This method is concurrency-s...
Definition: concurrent_vector.h:1331
bool empty() const
Tests if the concurrent vector is empty at the time this method is called. This method is concurrency...
Definition: concurrent_vector.h:992
_CONCRTIMP void _Internal_reserve(_Size_type _N, _Size_type _Element_size, _Size_type _Max_size)
iterator grow_by(size_type _Delta, const_reference _Item)
Grows this concurrent vector by _Delta elements. This method is concurrency-safe.
Definition: concurrent_vector.h:805
_Subatomic< _Segment_t * > _My_segment
Definition: concurrent_vector.h:163
bool operator>(const concurrent_vector< _Ty, A1 > &_A, const concurrent_vector< _Ty, A2 > &_B)
Tests if the concurrent_vector object on the left side of the operator is greater than the concurrent...
Definition: concurrent_vector.h:1850
static void __cdecl _Destroy_array(void *_Begin, size_type _N)
Definition: concurrent_vector.h:1685
bool lexicographical_compare(_InIt1 _First1, _InIt1 _Last1, _InIt2 _First2, _InIt2 _Last2)
Definition: memory:830
_In_ int _Value
Definition: setjmp.h:173
ptrdiff_t operator-(const _Vector_iterator< _Container, _Ty > &_I, const _Vector_iterator< _Container, _U > &_J)
Definition: concurrent_vector.h:380
const_reference operator[](size_type _Index) const
Provides read access to element at the given index in the concurrent vector. This method is concurren...
Definition: concurrent_vector.h:911
friend class _Helper
Definition: concurrent_vector.h:168
std::reverse_iterator< iterator > reverse_iterator
A type that provides a random-access iterator that can read any element in a reversed concurrent vect...
Definition: concurrent_vector.h:502
_CONCRTIMP void _Internal_resize(_Size_type _New_size, _Size_type _Element_size, _Size_type _Max_size, _My_internal_array_op1 _Destroy, _My_internal_array_op2 _Init, const void *_Src)
_FwdIt _Last
Definition: algorithm:1936
void clear()
Erases all elements in the concurrent vector. This method is not concurrency-safe.
Definition: concurrent_vector.h:1409
size_type size() const
Returns the number of elements in the concurrent vector. This method is concurrency-safe.
Definition: concurrent_vector.h:978
_Ax::template rebind< _Ty >::other _Allocator_type
Definition: concurrent_vector.h:390
_CONCRTIMP void _Internal_swap(_Concurrent_vector_base_v4 &)
void _Internal_assign(size_type _N, const_reference _Item)
Definition: concurrent_vector.h:1604
std::random_access_iterator_tag iterator_category
Definition: concurrent_vector.h:328
iterator end()
Returns an iterator of type iterator or const_iterator to the end of the concurrent vector...
Definition: concurrent_vector.h:1125
reference front()
Returns a reference or a const reference to the first element in the concurrent vector. If the concurrent vector is empty, the return value is undefined. This method is concurrency-safe.
Definition: concurrent_vector.h:1274
concurrent_vector(_InputIterator _Begin, _InputIterator _End, const allocator_type &_Al=allocator_type())
Constructs a concurrent vector.
Definition: concurrent_vector.h:703
_Ty * pointer
A type that provides a pointer to an element in a concurrent vector.
Definition: concurrent_vector.h:476
_Allocator_type _My_allocator
Definition: concurrent_vector.h:391
_Segment_index_t _First_block
Definition: concurrent_vector.h:134