BSHA3  0.17.99
P2P Blockchain, based on Bitcoin
Classes | Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
prevector< N, T, Size, Diff > Class Template Reference

Implements a drop-in replacement for std::vector<T> which stores up to N elements directly (without heap allocation). More...

#include <prevector.h>

Inheritance diagram for prevector< N, T, Size, Diff >:
[legend]
Collaboration diagram for prevector< N, T, Size, Diff >:
[legend]

Classes

class  const_iterator
 
class  const_reverse_iterator
 
union  direct_or_indirect
 
class  iterator
 
class  reverse_iterator
 

Public Types

typedef Size size_type
 
typedef Diff difference_type
 
typedef T value_type
 
typedef value_typereference
 
typedef const value_typeconst_reference
 
typedef value_typepointer
 
typedef const value_typeconst_pointer
 

Public Member Functions

void assign (size_type n, const T &val)
 
template<typename InputIterator >
void assign (InputIterator first, InputIterator last)
 
 prevector ()
 
 prevector (size_type n)
 
 prevector (size_type n, const T &val)
 
template<typename InputIterator >
 prevector (InputIterator first, InputIterator last)
 
 prevector (const prevector< N, T, Size, Diff > &other)
 
 prevector (prevector< N, T, Size, Diff > &&other)
 
prevectoroperator= (const prevector< N, T, Size, Diff > &other)
 
prevectoroperator= (prevector< N, T, Size, Diff > &&other)
 
size_type size () const
 
bool empty () const
 
iterator begin ()
 
const_iterator begin () const
 
iterator end ()
 
const_iterator end () const
 
reverse_iterator rbegin ()
 
const_reverse_iterator rbegin () const
 
reverse_iterator rend ()
 
const_reverse_iterator rend () const
 
size_t capacity () const
 
T & operator[] (size_type pos)
 
const T & operator[] (size_type pos) const
 
void resize (size_type new_size)
 
void reserve (size_type new_capacity)
 
void shrink_to_fit ()
 
void clear ()
 
iterator insert (iterator pos, const T &value)
 
void insert (iterator pos, size_type count, const T &value)
 
template<typename InputIterator >
void insert (iterator pos, InputIterator first, InputIterator last)
 
iterator erase (iterator pos)
 
iterator erase (iterator first, iterator last)
 
void push_back (const T &value)
 
void pop_back ()
 
T & front ()
 
const T & front () const
 
T & back ()
 
const T & back () const
 
void swap (prevector< N, T, Size, Diff > &other)
 
 ~prevector ()
 
bool operator== (const prevector< N, T, Size, Diff > &other) const
 
bool operator!= (const prevector< N, T, Size, Diff > &other) const
 
bool operator< (const prevector< N, T, Size, Diff > &other) const
 
size_t allocated_memory () const
 
value_typedata ()
 
const value_typedata () const
 

Private Member Functions

T * direct_ptr (difference_type pos)
 
const T * direct_ptr (difference_type pos) const
 
T * indirect_ptr (difference_type pos)
 
const T * indirect_ptr (difference_type pos) const
 
bool is_direct () const
 
void change_capacity (size_type new_capacity)
 
T * item_ptr (difference_type pos)
 
const T * item_ptr (difference_type pos) const
 
void fill (T *dst, ptrdiff_t count)
 
void fill (T *dst, ptrdiff_t count, const T &value)
 
template<typename InputIterator >
void fill (T *dst, InputIterator first, InputIterator last)
 

Private Attributes

size_type _size
 
union prevector::direct_or_indirect _union
 

Detailed Description

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
class prevector< N, T, Size, Diff >

Implements a drop-in replacement for std::vector<T> which stores up to N elements directly (without heap allocation).

The types Size and Diff are used to store element counts, and can be any unsigned + signed type.

Storage layout is either:

The data type T must be movable by memmove/realloc(). Once we switch to C++, move constructors can be used instead.

Definition at line 39 of file prevector.h.

Member Typedef Documentation

◆ const_pointer

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef const value_type* prevector< N, T, Size, Diff >::const_pointer

Definition at line 47 of file prevector.h.

◆ const_reference

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef const value_type& prevector< N, T, Size, Diff >::const_reference

Definition at line 45 of file prevector.h.

◆ difference_type

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef Diff prevector< N, T, Size, Diff >::difference_type

Definition at line 42 of file prevector.h.

◆ pointer

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef value_type* prevector< N, T, Size, Diff >::pointer

Definition at line 46 of file prevector.h.

◆ reference

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef value_type& prevector< N, T, Size, Diff >::reference

Definition at line 44 of file prevector.h.

◆ size_type

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef Size prevector< N, T, Size, Diff >::size_type

Definition at line 41 of file prevector.h.

◆ value_type

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
typedef T prevector< N, T, Size, Diff >::value_type

Definition at line 43 of file prevector.h.

Constructor & Destructor Documentation

◆ prevector() [1/6]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector< N, T, Size, Diff >::prevector ( )
inline

Definition at line 249 of file prevector.h.

◆ prevector() [2/6]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector< N, T, Size, Diff >::prevector ( size_type  n)
inlineexplicit

Definition at line 251 of file prevector.h.

Here is the call graph for this function:

◆ prevector() [3/6]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector< N, T, Size, Diff >::prevector ( size_type  n,
const T &  val 
)
inlineexplicit

Definition at line 255 of file prevector.h.

Here is the call graph for this function:

◆ prevector() [4/6]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
template<typename InputIterator >
prevector< N, T, Size, Diff >::prevector ( InputIterator  first,
InputIterator  last 
)
inline

Definition at line 262 of file prevector.h.

Here is the call graph for this function:

◆ prevector() [5/6]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector< N, T, Size, Diff >::prevector ( const prevector< N, T, Size, Diff > &  other)
inline

Definition at line 269 of file prevector.h.

Here is the call graph for this function:

◆ prevector() [6/6]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector< N, T, Size, Diff >::prevector ( prevector< N, T, Size, Diff > &&  other)
inline

Definition at line 276 of file prevector.h.

Here is the call graph for this function:

◆ ~prevector()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector< N, T, Size, Diff >::~prevector ( )
inline

Definition at line 457 of file prevector.h.

Here is the call graph for this function:

Member Function Documentation

◆ allocated_memory()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
size_t prevector< N, T, Size, Diff >::allocated_memory ( ) const
inline

Definition at line 511 of file prevector.h.

Here is the call graph for this function:

◆ assign() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::assign ( size_type  n,
const T &  val 
)
inline

Definition at line 229 of file prevector.h.

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

◆ assign() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
template<typename InputIterator >
void prevector< N, T, Size, Diff >::assign ( InputIterator  first,
InputIterator  last 
)
inline

Definition at line 239 of file prevector.h.

Here is the call graph for this function:

◆ back() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
T& prevector< N, T, Size, Diff >::back ( )
inline

Definition at line 444 of file prevector.h.

Here is the call graph for this function:

◆ back() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const T& prevector< N, T, Size, Diff >::back ( ) const
inline

Definition at line 448 of file prevector.h.

Here is the call graph for this function:

◆ begin() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
iterator prevector< N, T, Size, Diff >::begin ( )
inline

Definition at line 301 of file prevector.h.

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

◆ begin() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const_iterator prevector< N, T, Size, Diff >::begin ( ) const
inline

Definition at line 302 of file prevector.h.

Here is the call graph for this function:

◆ capacity()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
size_t prevector< N, T, Size, Diff >::capacity ( ) const
inline

Definition at line 311 of file prevector.h.

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

◆ change_capacity()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::change_capacity ( size_type  new_capacity)
inlineprivate

Definition at line 166 of file prevector.h.

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

◆ clear()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::clear ( )
inline

Definition at line 354 of file prevector.h.

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

◆ data() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
value_type* prevector< N, T, Size, Diff >::data ( )
inline

Definition at line 519 of file prevector.h.

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

◆ data() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const value_type* prevector< N, T, Size, Diff >::data ( ) const
inline

Definition at line 523 of file prevector.h.

Here is the call graph for this function:

◆ direct_ptr() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
T* prevector< N, T, Size, Diff >::direct_ptr ( difference_type  pos)
inlineprivate

Definition at line 160 of file prevector.h.

Here is the caller graph for this function:

◆ direct_ptr() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const T* prevector< N, T, Size, Diff >::direct_ptr ( difference_type  pos) const
inlineprivate

Definition at line 161 of file prevector.h.

◆ empty()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
bool prevector< N, T, Size, Diff >::empty ( ) const
inline

Definition at line 297 of file prevector.h.

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

◆ end() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
iterator prevector< N, T, Size, Diff >::end ( )
inline

Definition at line 303 of file prevector.h.

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

◆ end() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const_iterator prevector< N, T, Size, Diff >::end ( ) const
inline

Definition at line 304 of file prevector.h.

Here is the call graph for this function:

◆ erase() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
iterator prevector< N, T, Size, Diff >::erase ( iterator  pos)
inline

Definition at line 397 of file prevector.h.

Here is the caller graph for this function:

◆ erase() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
iterator prevector< N, T, Size, Diff >::erase ( iterator  first,
iterator  last 
)
inline

Definition at line 401 of file prevector.h.

Here is the call graph for this function:

◆ fill() [1/3]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::fill ( T *  dst,
ptrdiff_t  count 
)
inlineprivate

Definition at line 200 of file prevector.h.

Here is the caller graph for this function:

◆ fill() [2/3]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::fill ( T *  dst,
ptrdiff_t  count,
const T &  value 
)
inlineprivate

Definition at line 213 of file prevector.h.

◆ fill() [3/3]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
template<typename InputIterator >
void prevector< N, T, Size, Diff >::fill ( T *  dst,
InputIterator  first,
InputIterator  last 
)
inlineprivate

Definition at line 220 of file prevector.h.

◆ front() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
T& prevector< N, T, Size, Diff >::front ( )
inline

Definition at line 436 of file prevector.h.

Here is the call graph for this function:

◆ front() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const T& prevector< N, T, Size, Diff >::front ( ) const
inline

Definition at line 440 of file prevector.h.

Here is the call graph for this function:

◆ indirect_ptr() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
T* prevector< N, T, Size, Diff >::indirect_ptr ( difference_type  pos)
inlineprivate

Definition at line 162 of file prevector.h.

Here is the caller graph for this function:

◆ indirect_ptr() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const T* prevector< N, T, Size, Diff >::indirect_ptr ( difference_type  pos) const
inlineprivate

Definition at line 163 of file prevector.h.

◆ insert() [1/3]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
iterator prevector< N, T, Size, Diff >::insert ( iterator  pos,
const T &  value 
)
inline

Definition at line 358 of file prevector.h.

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

◆ insert() [2/3]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::insert ( iterator  pos,
size_type  count,
const T &  value 
)
inline

Definition at line 371 of file prevector.h.

◆ insert() [3/3]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
template<typename InputIterator >
void prevector< N, T, Size, Diff >::insert ( iterator  pos,
InputIterator  first,
InputIterator  last 
)
inline

Definition at line 384 of file prevector.h.

Here is the call graph for this function:

◆ is_direct()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
bool prevector< N, T, Size, Diff >::is_direct ( ) const
inlineprivate

Definition at line 164 of file prevector.h.

Here is the caller graph for this function:

◆ item_ptr() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
T* prevector< N, T, Size, Diff >::item_ptr ( difference_type  pos)
inlineprivate

Definition at line 197 of file prevector.h.

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

◆ item_ptr() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const T* prevector< N, T, Size, Diff >::item_ptr ( difference_type  pos) const
inlineprivate

Definition at line 198 of file prevector.h.

Here is the call graph for this function:

◆ operator!=()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
bool prevector< N, T, Size, Diff >::operator!= ( const prevector< N, T, Size, Diff > &  other) const
inline

Definition at line 484 of file prevector.h.

◆ operator<()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
bool prevector< N, T, Size, Diff >::operator< ( const prevector< N, T, Size, Diff > &  other) const
inline

Definition at line 488 of file prevector.h.

Here is the call graph for this function:

◆ operator=() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector& prevector< N, T, Size, Diff >::operator= ( const prevector< N, T, Size, Diff > &  other)
inline

Definition at line 280 of file prevector.h.

Here is the call graph for this function:

◆ operator=() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
prevector& prevector< N, T, Size, Diff >::operator= ( prevector< N, T, Size, Diff > &&  other)
inline

Definition at line 288 of file prevector.h.

Here is the call graph for this function:

◆ operator==()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
bool prevector< N, T, Size, Diff >::operator== ( const prevector< N, T, Size, Diff > &  other) const
inline

Definition at line 467 of file prevector.h.

Here is the call graph for this function:

◆ operator[]() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
T& prevector< N, T, Size, Diff >::operator[] ( size_type  pos)
inline

Definition at line 319 of file prevector.h.

Here is the call graph for this function:

◆ operator[]() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const T& prevector< N, T, Size, Diff >::operator[] ( size_type  pos) const
inline

Definition at line 323 of file prevector.h.

Here is the call graph for this function:

◆ pop_back()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::pop_back ( )
inline

Definition at line 432 of file prevector.h.

Here is the call graph for this function:

◆ push_back()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::push_back ( const T &  value)
inline

Definition at line 423 of file prevector.h.

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

◆ rbegin() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
reverse_iterator prevector< N, T, Size, Diff >::rbegin ( )
inline

Definition at line 306 of file prevector.h.

Here is the call graph for this function:

◆ rbegin() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const_reverse_iterator prevector< N, T, Size, Diff >::rbegin ( ) const
inline

Definition at line 307 of file prevector.h.

Here is the call graph for this function:

◆ rend() [1/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
reverse_iterator prevector< N, T, Size, Diff >::rend ( )
inline

Definition at line 308 of file prevector.h.

Here is the call graph for this function:

◆ rend() [2/2]

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
const_reverse_iterator prevector< N, T, Size, Diff >::rend ( ) const
inline

Definition at line 309 of file prevector.h.

Here is the call graph for this function:

◆ reserve()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::reserve ( size_type  new_capacity)
inline

Definition at line 344 of file prevector.h.

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

◆ resize()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::resize ( size_type  new_size)
inline

Definition at line 327 of file prevector.h.

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

◆ shrink_to_fit()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::shrink_to_fit ( )
inline

Definition at line 350 of file prevector.h.

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

◆ size()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
size_type prevector< N, T, Size, Diff >::size ( ) const
inline

Definition at line 293 of file prevector.h.

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

◆ swap()

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
void prevector< N, T, Size, Diff >::swap ( prevector< N, T, Size, Diff > &  other)
inline

Definition at line 452 of file prevector.h.

Here is the caller graph for this function:

Member Data Documentation

◆ _size

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
size_type prevector< N, T, Size, Diff >::_size
private

Definition at line 151 of file prevector.h.

◆ _union

template<unsigned int N, typename T, typename Size = uint32_t, typename Diff = int32_t>
union prevector::direct_or_indirect prevector< N, T, Size, Diff >::_union
private

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