SmallVector#

Fully qualified name: omni::graph::exec::unstable::SmallVector

template<typename T, std::size_t N>
class SmallVector : public omni::graph::exec::unstable::SmallVectorBase#

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.

SmallVector 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 SmallVector may have methods in addition to those that you would find on std::vector.

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

Unnamed Group

enum DefaultInitTag#

Enum to disambiguate constructors.

Values:

enumerator DefaultInit#
using value_type = T#

Relevant type definitions.

using reference = T&#

Relevant type definitions.

using const_reference = const T&#

Relevant type definitions.

using iterator = T*#

}@

Iterator Support

using const_iterator = const T*#

Iterator Support.

using reverse_iterator = std::reverse_iterator<iterator>#

Iterator Support.

using const_reverse_iterator = std::reverse_iterator<const_iterator>#

Iterator Support.

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#

Compile time check to enabled method when forward iterator is available.

inline SmallVector()#

}@

Default constructor.

inline explicit SmallVector(size_type n)#

Construct a vector holding n value-initialized elements.

inline SmallVector(size_type n, const value_type &v)#

Construct a vector holding n copies of v.

inline SmallVector(size_type n, DefaultInitTag)#

Construct a vector holding n default-initialized elements.

inline SmallVector(const SmallVector &rhs)#

Copy constructor.

inline SmallVector(SmallVector &&rhs)#

Move constructor.

inline SmallVector(std::initializer_list<T> values)#

Construct a new vector from initializer list.

template<typename ForwardIterator, typename = _EnableIfForwardIterator<ForwardIterator>>
inline SmallVector(
ForwardIterator first,
ForwardIterator last,
)#

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

inline ~SmallVector()#

Destructor.

inline SmallVector &operator=(const SmallVector &rhs)#

Assignment operator.

inline SmallVector &operator=(SmallVector &&rhs)#

Move assignment operator.

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

Replace existing contents with the contents of ilist.

inline void swap(SmallVector &rhs)#

Swap two vector instances.

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

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

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

Insert an entry at the given iterator.

inline iterator erase(const_iterator it)#

Erase an entry at the given iterator.

inline iterator erase(const_iterator it, const_iterator last)#

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

inline void reserve(size_type newCapacity)#

Reserve storage for newCapacity entries.

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

Resize the vector to newSize and insert copies of v.

inline void clear()#

Clear the entries in the vector. Does not let go of the underpinning storage.

template<typename ForwardIterator, typename = _EnableIfForwardIterator<ForwardIterator>>
inline void assign(
ForwardIterator first,
ForwardIterator last,
)#

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

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

Replace existing contents with the contents of ilist.

template<typename ...Args>
inline void emplace_back(Args&&... args)#

Emplace an entry at the back of the vector.

inline void push_back(const value_type &v)#

Copy an entry to the back of the vector,.

inline void push_back(value_type &&v)#

Move an entry to the back of the vector.

template<typename ForwardIterator>
inline void insert(
iterator pos,
ForwardIterator first,
ForwardIterator last,
)#

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

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

Insert elements from ilist starting at position pos.

inline void pop_back()#

Remove the entry at the back of the vector.

inline size_type size() const#

Returns the current size of the vector.

inline bool empty() const#

Returns true if this vector is empty.

inline size_type capacity() const#

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.

inline iterator begin()#

Returns an iterator to the beginning of the vector.

inline const_iterator begin() const#

Returns an iterator to the beginning of the vector.

inline const_iterator cbegin() const#

Returns an iterator to the beginning of the vector.

static inline constexpr size_type max_size()#

Returns the maximum size of this vector.

static inline constexpr size_type internal_capacity()#

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

Unnamed Group

inline iterator end()#

Returns an iterator to the end of the vector.

inline const_iterator end() const#

Returns an iterator to the end of the vector.

inline const_iterator cend() const#

Returns an iterator to the end of the vector.

Unnamed Group

inline reverse_iterator rbegin()#

Returns a reverse iterator to the beginning of the vector.

inline const_reverse_iterator rbegin() const#

Returns a reverse iterator to the beginning of the vector.

inline const_reverse_iterator crbegin() const#

Returns a reverse iterator to the beginning of the vector.

Unnamed Group

inline reverse_iterator rend()#

Returns a reverse iterator to the end of the vector.

inline const_reverse_iterator rend() const#

Returns a reverse iterator to the end of the vector.

inline const_reverse_iterator crend() const#

Returns a reverse iterator to the end of the vector.

Public Types

using size_type = std::uint32_t#

Size type.

using difference_type = std::uint32_t#

Difference type.

Public Functions

inline reference front()#

Returns the first element in the vector.

inline const_reference front() const#

Returns the first element in the vector.

inline reference back()#

Returns the last element in the vector.

inline const_reference back() const#

Returns the last elements in the vector.

inline reference operator[](size_type i)#

Access the specified element.

inline const_reference operator[](size_type i) const#

Access the specified element.

inline value_type *data()#

Direct access to the underlying array.

inline const value_type *data() const#

Direct access to the underlying array.

inline bool operator==(const SmallVector &rhs) const#

Lexicographically compares the elements in the vectors for equality.

inline bool operator!=(const SmallVector &rhs) const#

Lexicographically compares the elements in the vectors for inequality.

Public Static Functions

template<typename U>
static inline constexpr size_type ComputeSerendipitousLocalCapacity(
)#

Returns the local capacity that may be used without increasing the size of the SmallVector. SmallVector<T, N> will never use more local capacity than is specified by N but clients that wish to maximize local occupancy in a generic way can compute N using this function.

Protected Static Functions

template<typename Iterator>
static inline Iterator _UninitializedMove(
Iterator first,
Iterator last,
Iterator dest,
)#

Invoke std::uninitialized_copy that either moves or copies entries, depending on whether the type is move constructible or not.

template<typename U>
static inline void _MoveConstruct(U *p, U *src)#

Invokes either the move or copy constructor (via placement new), depending on whether U is move constructible or not.