Loading...
Searching...
No Matches
TfSmallVector< T, N > Class Template Reference

This is a small-vector class with local storage optimization, the local storage can be specified via a template parameter, and expresses the number of entries the container can store locally. More...

#include <smallVector.h>

Inherits TfSmallVectorBase.

Public Types

Relevant Typedefs.

XXX: Functionality currently missing, and which we would like to add as needed:

  • emplace
  • shrink_to_fit
  • shrink_to_local / shrink_to_internal (or similar, free standing function)
typedef T value_type
 
typedef T & reference
 
typedef const T & const_reference
 

Public Member Functions

reference front ()
 Returns the first element in the vector.
 
const_reference front () const
 Returns the first element in the vector.
 
reference back ()
 Returns the last element in the vector.
 
const_reference back () const
 Returns the last elements in the vector.
 
reference operator[] (size_type i)
 Access the specified element.
 
const_reference operator[] (size_type i) const
 Access the specified element.
 
value_type * data ()
 Direct access to the underlying array.
 
const value_type * data () const
 Direct access to the underlying array.
 
bool operator== (const TfSmallVector &rhs) const
 Lexicographically compares the elements in the vectors for equality.
 
bool operator!= (const TfSmallVector &rhs) const
 Lexicographically compares the elements in the vectors for inequality.
 
Returns an iterator to the beginning of the vector.
iterator begin ()
 
const_iterator begin () const
 
const_iterator cbegin () const
 
Returns an iterator to the end of the vector.
iterator end ()
 
const_iterator end () const
 
const_iterator cend () const
 
Returns a reverse iterator to the beginning of the vector.
reverse_iterator rbegin ()
 
const_reverse_iterator rbegin () const
 
const_reverse_iterator crbegin () const
 
Returns a reverse iterator to the end of the vector.
reverse_iterator rend ()
 
const_reverse_iterator rend () const
 
const_reverse_iterator crend () const
 

Iterator Support.

}@

enum  DefaultInitTag { DefaultInit }
 Construct a vector holding n default-initialized elements. More...
 
using iterator = T *
 
using const_iterator = const T *
 
typedef std::reverse_iterator< iterator > reverse_iterator
 
typedef std::reverse_iterator< const_iterator > const_reverse_iterator
 
template<typename _ForwardIterator >
using _EnableIfForwardIterator = typename std::enable_if< std::is_convertible< typename std::iterator_traits< _ForwardIterator >::iterator_category, std::forward_iterator_tag >::value >::type
 
 TfSmallVector ()
 }@
 
 TfSmallVector (size_type n)
 Construct a vector holding n value-initialized elements.
 
 TfSmallVector (size_type n, const value_type &v)
 Construct a vector holding n copies of v.
 
 TfSmallVector (size_type n, DefaultInitTag)
 
 TfSmallVector (const TfSmallVector &rhs)
 Copy constructor.
 
 TfSmallVector (TfSmallVector &&rhs)
 Move constructor.
 
 TfSmallVector (std::initializer_list< T > values)
 Construct a new vector from initializer list.
 
template<typename ForwardIterator , typename = _EnableIfForwardIterator<ForwardIterator>>
 TfSmallVector (ForwardIterator first, ForwardIterator last)
 Creates a new vector containing copies of the data between first and last.
 
 ~TfSmallVector ()
 Destructor.
 
TfSmallVectoroperator= (const TfSmallVector &rhs)
 Assignment operator.
 
TfSmallVectoroperator= (TfSmallVector &&rhs)
 Move assignment operator.
 
TfSmallVectoroperator= (std::initializer_list< T > ilist)
 Replace existing contents with the contents of ilist.
 
void swap (TfSmallVector &rhs)
 Swap two vector instances.
 
iterator insert (const_iterator it, value_type &&v)
 Insert an rvalue-reference entry at the given iterator position.
 
iterator insert (const_iterator it, const value_type &v)
 Insert an entry at the given iterator.
 
iterator erase (const_iterator it)
 Erase an entry at the given iterator.
 
iterator erase (const_iterator it, const_iterator last)
 Erase entries between [ first, last ) from the vector.
 
void reserve (size_type newCapacity)
 Reserve storage for newCapacity entries.
 
void resize (size_type newSize, const value_type &v=value_type())
 Resize the vector to newSize and insert copies of \v.
 
void clear ()
 Clear the entries in the vector.
 
template<typename ForwardIterator , typename = _EnableIfForwardIterator<ForwardIterator>>
void assign (ForwardIterator first, ForwardIterator last)
 Clears any previously held entries, and copies entries between [ first, last ) to this vector.
 
void assign (std::initializer_list< T > ilist)
 Replace existing contents with the contents of ilist.
 
template<typename... Args>
void emplace_back (Args &&... args)
 Emplace an entry at the back of the vector.
 
void push_back (const value_type &v)
 Copy an entry to the back of the vector,.
 
void push_back (value_type &&v)
 Move an entry to the back of the vector.
 
template<typename ForwardIterator >
void insert (iterator pos, ForwardIterator first, ForwardIterator last)
 Copy the range denoted by [first, last) into this vector before pos.
 
void insert (iterator pos, std::initializer_list< T > ilist)
 Insert elements from ilist starting at position pos.
 
void pop_back ()
 Remove the entry at the back of the vector.
 
size_type size () const
 Returns the current size of the vector.
 
bool empty () const
 Returns true if this vector is empty.
 
size_type capacity () const
 Returns the current capacity of this vector.
 
static constexpr size_type max_size ()
 Returns the maximum size of this vector.
 
static constexpr size_type internal_capacity ()
 Returns the local storage capacity.
 

Detailed Description

template<typename T, uint32_t N>
class TfSmallVector< T, N >

This is a small-vector class with local storage optimization, the local storage can be specified via a template parameter, and expresses the number of entries the container can store locally.

In addition to the local storage optimization, this vector is also optimized for storing a smaller number of entries on the heap: It features a reduced memory footprint (minimum 16 bytes) by limiting max_size() to 2^32, which should still be more than enough for most use cases where a small-vector is advantageous.

TfSmallVector mimics the std::vector API, and can thus be easily used as a drop-in replacement where appropriate. Note, however, that not all the methods on std::vector are implemented here, and that TfSmallVector may have methods in addition to those that you would find on std::vector.

Note that a TfSmallVector that has grown beyond its local storage, will NOT move its entries back into the local storage once it shrinks back to N.

Definition at line 177 of file smallVector.h.

Member Typedef Documentation

◆ _EnableIfForwardIterator

using _EnableIfForwardIterator = typename std::enable_if< std::is_convertible< typename std::iterator_traits< _ForwardIterator>::iterator_category, std::forward_iterator_tag >::value >::type

Definition at line 277 of file smallVector.h.

◆ const_iterator

using const_iterator = const T*

Definition at line 202 of file smallVector.h.

◆ const_reference

typedef const T& const_reference

Definition at line 194 of file smallVector.h.

◆ const_reverse_iterator

typedef std::reverse_iterator<const_iterator> const_reverse_iterator

Definition at line 204 of file smallVector.h.

◆ iterator

using iterator = T*

Definition at line 201 of file smallVector.h.

◆ reference

typedef T& reference

Definition at line 193 of file smallVector.h.

◆ reverse_iterator

typedef std::reverse_iterator<iterator> reverse_iterator

Definition at line 203 of file smallVector.h.

◆ value_type

typedef T value_type

Definition at line 192 of file smallVector.h.

Member Enumeration Documentation

◆ DefaultInitTag

Construct a vector holding n default-initialized elements.

Definition at line 233 of file smallVector.h.

Constructor & Destructor Documentation

◆ TfSmallVector() [1/8]

TfSmallVector ( )
inline

}@

Default constructor.

Definition at line 210 of file smallVector.h.

◆ TfSmallVector() [2/8]

TfSmallVector ( size_type  n)
inlineexplicit

Construct a vector holding n value-initialized elements.

Definition at line 214 of file smallVector.h.

◆ TfSmallVector() [3/8]

TfSmallVector ( size_type  n,
const value_type &  v 
)
inline

Construct a vector holding n copies of v.

Definition at line 225 of file smallVector.h.

◆ TfSmallVector() [4/8]

TfSmallVector ( size_type  n,
DefaultInitTag   
)
inline

Definition at line 234 of file smallVector.h.

◆ TfSmallVector() [5/8]

TfSmallVector ( const TfSmallVector< T, N > &  rhs)
inline

Copy constructor.

Definition at line 245 of file smallVector.h.

◆ TfSmallVector() [6/8]

TfSmallVector ( TfSmallVector< T, N > &&  rhs)
inline

Move constructor.

Definition at line 252 of file smallVector.h.

◆ TfSmallVector() [7/8]

TfSmallVector ( std::initializer_list< T >  values)
inline

Construct a new vector from initializer list.

Definition at line 272 of file smallVector.h.

◆ TfSmallVector() [8/8]

TfSmallVector ( ForwardIterator  first,
ForwardIterator  last 
)
inline

Creates a new vector containing copies of the data between first and last.


Definition at line 290 of file smallVector.h.

◆ ~TfSmallVector()

~TfSmallVector ( )
inline

Destructor.

Definition at line 298 of file smallVector.h.

Member Function Documentation

◆ assign() [1/2]

void assign ( ForwardIterator  first,
ForwardIterator  last 
)
inline

Clears any previously held entries, and copies entries between [ first, last ) to this vector.

Definition at line 484 of file smallVector.h.

◆ assign() [2/2]

void assign ( std::initializer_list< T >  ilist)
inline

Replace existing contents with the contents of ilist.

Definition at line 494 of file smallVector.h.

◆ back() [1/2]

reference back ( )
inline

Returns the last element in the vector.

Definition at line 744 of file smallVector.h.

◆ back() [2/2]

const_reference back ( ) const
inline

Returns the last elements in the vector.

Definition at line 750 of file smallVector.h.

◆ begin() [1/2]

iterator begin ( )
inline

Definition at line 665 of file smallVector.h.

◆ begin() [2/2]

const_iterator begin ( ) const
inline

Definition at line 669 of file smallVector.h.

◆ capacity()

size_type capacity ( ) const
inline

Returns the current capacity of this vector.

Note that if the returned value is <= N, it does NOT mean the storage is local. A vector that has previously grown beyond its local storage, will not move entries back to the local storage once it shrinks to N.

Definition at line 650 of file smallVector.h.

◆ cbegin()

const_iterator cbegin ( ) const
inline

Definition at line 673 of file smallVector.h.

◆ cend()

const_iterator cend ( ) const
inline

Definition at line 690 of file smallVector.h.

◆ clear()

void clear ( )
inline

Clear the entries in the vector.

Does not let go of the underpinning storage.

Definition at line 474 of file smallVector.h.

◆ crbegin()

const_reverse_iterator crbegin ( ) const
inline

Definition at line 707 of file smallVector.h.

◆ crend()

const_reverse_iterator crend ( ) const
inline

Definition at line 724 of file smallVector.h.

◆ data() [1/2]

value_type * data ( )
inline

Direct access to the underlying array.

Definition at line 768 of file smallVector.h.

◆ data() [2/2]

const value_type * data ( ) const
inline

Direct access to the underlying array.

Definition at line 774 of file smallVector.h.

◆ emplace_back()

void emplace_back ( Args &&...  args)
inline

Emplace an entry at the back of the vector.

Definition at line 501 of file smallVector.h.

◆ empty()

bool empty ( ) const
inline

Returns true if this vector is empty.

Definition at line 641 of file smallVector.h.

◆ end() [1/2]

iterator end ( )
inline

Definition at line 682 of file smallVector.h.

◆ end() [2/2]

const_iterator end ( ) const
inline

Definition at line 686 of file smallVector.h.

◆ erase() [1/2]

iterator erase ( const_iterator  it)
inline

Erase an entry at the given iterator.

Definition at line 408 of file smallVector.h.

◆ erase() [2/2]

iterator erase ( const_iterator  it,
const_iterator  last 
)
inline

Erase entries between [ first, last ) from the vector.

Definition at line 414 of file smallVector.h.

◆ front() [1/2]

reference front ( )
inline

Returns the first element in the vector.

Definition at line 732 of file smallVector.h.

◆ front() [2/2]

const_reference front ( ) const
inline

Returns the first element in the vector.

Definition at line 738 of file smallVector.h.

◆ insert() [1/4]

iterator insert ( const_iterator  it,
const value_type &  v 
)
inline

Insert an entry at the given iterator.

Definition at line 402 of file smallVector.h.

◆ insert() [2/4]

iterator insert ( const_iterator  it,
value_type &&  v 
)
inline

Insert an rvalue-reference entry at the given iterator position.

Definition at line 396 of file smallVector.h.

◆ insert() [3/4]

void insert ( iterator  pos,
ForwardIterator  first,
ForwardIterator  last 
)
inline

Copy the range denoted by [first, last) into this vector before pos.

Definition at line 525 of file smallVector.h.

◆ insert() [4/4]

void insert ( iterator  pos,
std::initializer_list< T >  ilist 
)
inline

Insert elements from ilist starting at position pos.

Definition at line 616 of file smallVector.h.

◆ internal_capacity()

static constexpr size_type internal_capacity ( )
inlinestaticconstexpr

Returns the local storage capacity.

The vector uses its local storage if capacity() <= internal_capacity(). This method mimics the boost::container::small_vector interface.

Definition at line 658 of file smallVector.h.

◆ max_size()

static constexpr size_type max_size ( )
inlinestaticconstexpr

Returns the maximum size of this vector.

Definition at line 635 of file smallVector.h.

◆ operator!=()

bool operator!= ( const TfSmallVector< T, N > &  rhs) const
inline

Lexicographically compares the elements in the vectors for inequality.

Definition at line 786 of file smallVector.h.

◆ operator=() [1/3]

TfSmallVector & operator= ( const TfSmallVector< T, N > &  rhs)
inline

Assignment operator.

Definition at line 305 of file smallVector.h.

◆ operator=() [2/3]

TfSmallVector & operator= ( std::initializer_list< T >  ilist)
inline

Replace existing contents with the contents of ilist.

Definition at line 323 of file smallVector.h.

◆ operator=() [3/3]

TfSmallVector & operator= ( TfSmallVector< T, N > &&  rhs)
inline

Move assignment operator.

Definition at line 314 of file smallVector.h.

◆ operator==()

bool operator== ( const TfSmallVector< T, N > &  rhs) const
inline

Lexicographically compares the elements in the vectors for equality.

Definition at line 780 of file smallVector.h.

◆ operator[]() [1/2]

reference operator[] ( size_type  i)
inline

Access the specified element.

Definition at line 756 of file smallVector.h.

◆ operator[]() [2/2]

const_reference operator[] ( size_type  i) const
inline

Access the specified element.

Definition at line 762 of file smallVector.h.

◆ pop_back()

void pop_back ( )
inline

Remove the entry at the back of the vector.

Definition at line 622 of file smallVector.h.

◆ push_back() [1/2]

void push_back ( const value_type &  v)
inline

Copy an entry to the back of the vector,.

Definition at line 511 of file smallVector.h.

◆ push_back() [2/2]

void push_back ( value_type &&  v)
inline

Move an entry to the back of the vector.

Definition at line 517 of file smallVector.h.

◆ rbegin() [1/2]

reverse_iterator rbegin ( )
inline

Definition at line 699 of file smallVector.h.

◆ rbegin() [2/2]

const_reverse_iterator rbegin ( ) const
inline

Definition at line 703 of file smallVector.h.

◆ rend() [1/2]

reverse_iterator rend ( )
inline

Definition at line 716 of file smallVector.h.

◆ rend() [2/2]

const_reverse_iterator rend ( ) const
inline

Definition at line 720 of file smallVector.h.

◆ reserve()

void reserve ( size_type  newCapacity)
inline

Reserve storage for newCapacity entries.

Definition at line 443 of file smallVector.h.

◆ resize()

void resize ( size_type  newSize,
const value_type &  v = value_type() 
)
inline

Resize the vector to newSize and insert copies of \v.

Definition at line 454 of file smallVector.h.

◆ size()

size_type size ( ) const
inline

Returns the current size of the vector.

Definition at line 629 of file smallVector.h.

◆ swap()

void swap ( TfSmallVector< T, N > &  rhs)
inline

Swap two vector instances.

Definition at line 330 of file smallVector.h.


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