Home ⌂Doc Index ◂Up ▴
Intel(R) Threading Building Blocks Doxygen Documentation  version 4.2.3
tbb::internal::fast_reverse_vector< T, max_segments > Class Template Reference

Vector that grows without reallocations, and stores items in the reverse order. More...

#include <scheduler_utility.h>

Collaboration diagram for tbb::internal::fast_reverse_vector< T, max_segments >:

Public Member Functions

 fast_reverse_vector (T *initial_segment, size_t segment_size)
 
 ~fast_reverse_vector ()
 
size_t size () const
 
void push_back (const T &val)
 
void copy_memory (T *dst) const
 Copies the contents of the vector into the dst array. More...
 

Protected Attributes

T * m_cur_segment
 The current (not completely filled) segment. More...
 
size_t m_cur_segment_size
 Capacity of m_cur_segment. More...
 
size_t m_pos
 Insertion position in m_cur_segment. More...
 
T * m_segments [max_segments]
 Array of segments (has fixed size specified by the second template parameter) More...
 
size_t m_num_segments
 Number of segments (the size of m_segments) More...
 
size_t m_size
 Number of items in the segments in m_segments. More...
 

Detailed Description

template<typename T, size_t max_segments = 16>
class tbb::internal::fast_reverse_vector< T, max_segments >

Vector that grows without reallocations, and stores items in the reverse order.

Requires to initialize its first segment with a preallocated memory chunk (usually it is static array or an array allocated on the stack). The second template parameter specifies maximal number of segments. Each next segment is twice as large as the previous one.

Definition at line 56 of file scheduler_utility.h.

Constructor & Destructor Documentation

◆ fast_reverse_vector()

template<typename T, size_t max_segments = 16>
tbb::internal::fast_reverse_vector< T, max_segments >::fast_reverse_vector ( T *  initial_segment,
size_t  segment_size 
)
inline

Definition at line 59 of file scheduler_utility.h.

60  : m_cur_segment(initial_segment)
61  , m_cur_segment_size(segment_size)
62  , m_pos(segment_size)
63  , m_num_segments(0)
64  , m_size(0)
65  {
66  __TBB_ASSERT ( initial_segment && segment_size, "Nonempty initial segment must be supplied");
67  }
size_t m_num_segments
Number of segments (the size of m_segments)
size_t m_size
Number of items in the segments in m_segments.
size_t m_pos
Insertion position in m_cur_segment.
T * m_cur_segment
The current (not completely filled) segment.
size_t m_cur_segment_size
Capacity of m_cur_segment.
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT.

◆ ~fast_reverse_vector()

template<typename T, size_t max_segments = 16>
tbb::internal::fast_reverse_vector< T, max_segments >::~fast_reverse_vector ( )
inline

Definition at line 69 of file scheduler_utility.h.

70  {
71  for ( size_t i = 1; i < m_num_segments; ++i )
72  NFS_Free( m_segments[i] );
73  }
size_t m_num_segments
Number of segments (the size of m_segments)
T * m_segments[max_segments]
Array of segments (has fixed size specified by the second template parameter)
void __TBB_EXPORTED_FUNC NFS_Free(void *)
Free memory allocated by NFS_Allocate.

References tbb::internal::fast_reverse_vector< T, max_segments >::m_num_segments, tbb::internal::fast_reverse_vector< T, max_segments >::m_segments, and tbb::internal::NFS_Free().

Here is the call graph for this function:

Member Function Documentation

◆ copy_memory()

template<typename T, size_t max_segments = 16>
void tbb::internal::fast_reverse_vector< T, max_segments >::copy_memory ( T *  dst) const
inline

Copies the contents of the vector into the dst array.

Can only be used when T is a POD type, as copying does not invoke copy constructors.

Definition at line 92 of file scheduler_utility.h.

93  {
94  size_t sz = m_cur_segment_size - m_pos;
95  memcpy( dst, m_cur_segment + m_pos, sz * sizeof(T) );
96  dst += sz;
97  sz = m_cur_segment_size / 2;
98  for ( long i = (long)m_num_segments - 2; i >= 0; --i ) {
99  memcpy( dst, m_segments[i], sz * sizeof(T) );
100  dst += sz;
101  sz /= 2;
102  }
103  }
size_t m_num_segments
Number of segments (the size of m_segments)
size_t m_pos
Insertion position in m_cur_segment.
T * m_cur_segment
The current (not completely filled) segment.
size_t m_cur_segment_size
Capacity of m_cur_segment.
T * m_segments[max_segments]
Array of segments (has fixed size specified by the second template parameter)

References tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment, tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment_size, tbb::internal::fast_reverse_vector< T, max_segments >::m_num_segments, tbb::internal::fast_reverse_vector< T, max_segments >::m_pos, and tbb::internal::fast_reverse_vector< T, max_segments >::m_segments.

Referenced by tbb::internal::generic_scheduler::local_spawn().

Here is the caller graph for this function:

◆ push_back()

template<typename T, size_t max_segments = 16>
void tbb::internal::fast_reverse_vector< T, max_segments >::push_back ( const T &  val)
inline

Definition at line 77 of file scheduler_utility.h.

78  {
79  if ( !m_pos ) {
82  m_cur_segment_size *= 2;
85  __TBB_ASSERT ( m_num_segments < max_segments, "Maximal capacity exceeded" );
86  }
87  m_cur_segment[--m_pos] = val;
88  }
size_t m_num_segments
Number of segments (the size of m_segments)
void *__TBB_EXPORTED_FUNC NFS_Allocate(size_t n_element, size_t element_size, void *hint)
Allocate memory on cache/sector line boundary.
size_t m_size
Number of items in the segments in m_segments.
size_t m_pos
Insertion position in m_cur_segment.
T * m_cur_segment
The current (not completely filled) segment.
size_t m_cur_segment_size
Capacity of m_cur_segment.
T * m_segments[max_segments]
Array of segments (has fixed size specified by the second template parameter)
#define __TBB_ASSERT(predicate, comment)
No-op version of __TBB_ASSERT.
Definition: tbb_stddef.h:165

References __TBB_ASSERT, tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment, tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment_size, tbb::internal::fast_reverse_vector< T, max_segments >::m_num_segments, tbb::internal::fast_reverse_vector< T, max_segments >::m_pos, tbb::internal::fast_reverse_vector< T, max_segments >::m_segments, tbb::internal::fast_reverse_vector< T, max_segments >::m_size, and tbb::internal::NFS_Allocate().

Referenced by tbb::internal::generic_scheduler::local_spawn().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ size()

template<typename T, size_t max_segments = 16>
size_t tbb::internal::fast_reverse_vector< T, max_segments >::size ( ) const
inline

Definition at line 75 of file scheduler_utility.h.

75 { return m_size + m_cur_segment_size - m_pos; }
size_t m_size
Number of items in the segments in m_segments.
size_t m_pos
Insertion position in m_cur_segment.
size_t m_cur_segment_size
Capacity of m_cur_segment.

References tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment_size, tbb::internal::fast_reverse_vector< T, max_segments >::m_pos, and tbb::internal::fast_reverse_vector< T, max_segments >::m_size.

Referenced by tbb::internal::generic_scheduler::local_spawn().

Here is the caller graph for this function:

Member Data Documentation

◆ m_cur_segment

template<typename T, size_t max_segments = 16>
T* tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment
protected

◆ m_cur_segment_size

template<typename T, size_t max_segments = 16>
size_t tbb::internal::fast_reverse_vector< T, max_segments >::m_cur_segment_size
protected

◆ m_num_segments

template<typename T, size_t max_segments = 16>
size_t tbb::internal::fast_reverse_vector< T, max_segments >::m_num_segments
protected

◆ m_pos

template<typename T, size_t max_segments = 16>
size_t tbb::internal::fast_reverse_vector< T, max_segments >::m_pos
protected

◆ m_segments

template<typename T, size_t max_segments = 16>
T* tbb::internal::fast_reverse_vector< T, max_segments >::m_segments[max_segments]
protected

◆ m_size

template<typename T, size_t max_segments = 16>
size_t tbb::internal::fast_reverse_vector< T, max_segments >::m_size
protected

Number of items in the segments in m_segments.

Definition at line 122 of file scheduler_utility.h.

Referenced by tbb::internal::fast_reverse_vector< T, max_segments >::push_back(), and tbb::internal::fast_reverse_vector< T, max_segments >::size().


The documentation for this class was generated from the following file:

Copyright © 2005-2020 Intel Corporation. All Rights Reserved.

Intel, Pentium, Intel Xeon, Itanium, Intel XScale and VTune are registered trademarks or trademarks of Intel Corporation or its subsidiaries in the United States and other countries.

* Other names and brands may be claimed as the property of others.