PMDK C++ bindings  1.12.1-rc1
This is the C++ bindings documentation for PMDK's libpmemobj.
Public Member Functions | Private Member Functions | List of all members
pmem::obj::array< T, N > Struct Template Reference

pmem::obj::array - persistent container with std::array compatible interface. More...

#include <libpmemobj++/container/array.hpp>

Public Member Functions

 array ()=default
 Defaulted constructor.
 
 array (const array &)=default
 Defaulted copy constructor.
 
 array (array &&)=default
 Defaulted move constructor. More...
 
arrayoperator= (const array &other)
 Copy assignment operator - perform assignment from other pmem::obj::array. More...
 
arrayoperator= (array &&other)
 Move assignment operator - perform move assignment from other pmem::obj::array. More...
 
reference at (size_type n)
 Access element at specific index and add it to a transaction. More...
 
const_reference at (size_type n) const
 Access element at specific index. More...
 
const_reference const_at (size_type n) const
 Access element at specific index. More...
 
reference operator[] (size_type n)
 Access element at specific index and add it to a transaction. More...
 
const_reference operator[] (size_type n) const
 Access element at specific index. More...
 
T * data ()
 Returns raw pointer to the underlying data and adds entire array to a transaction. More...
 
const T * data () const noexcept
 Returns const raw pointer to the underlying data.
 
const T * cdata () const noexcept
 Returns const raw pointer to the underlying data.
 
iterator begin ()
 Returns an iterator to the beginning. More...
 
iterator end ()
 Returns an iterator to the end. More...
 
const_iterator begin () const noexcept
 Returns const iterator to the beginning.
 
const_iterator cbegin () const noexcept
 Returns const iterator to the beginning.
 
const_iterator end () const noexcept
 Returns a const iterator to the end.
 
const_iterator cend () const noexcept
 Returns a const iterator to the end.
 
reverse_iterator rbegin ()
 Returns a reverse iterator to the beginning. More...
 
reverse_iterator rend ()
 Returns a reverse iterator to the end. More...
 
const_reverse_iterator rbegin () const noexcept
 Returns a const reverse iterator to the beginning.
 
const_reverse_iterator crbegin () const noexcept
 Returns a const reverse iterator to the beginning.
 
const_reverse_iterator rend () const noexcept
 Returns a const reverse iterator to the end.
 
const_reverse_iterator crend () const noexcept
 Returns a const reverse iterator to the beginning.
 
reference front ()
 Access the first element and add this element to a transaction. More...
 
reference back ()
 Access the last element and add this element to a transaction. More...
 
const_reference front () const
 Access the first element.
 
const_reference cfront () const
 Access the first element.
 
const_reference back () const
 Access the last element.
 
const_reference cback () const
 Access the last element.
 
slice< pointer > range (size_type start, size_type n)
 Returns slice and snapshots requested range. More...
 
slice< range_snapshotting_iteratorrange (size_type start, size_type n, size_type snapshot_size)
 Returns slice. More...
 
slice< const_iterator > range (size_type start, size_type n) const
 Returns const slice. More...
 
slice< const_iterator > crange (size_type start, size_type n) const
 Returns const slice. More...
 
constexpr size_type size () const noexcept
 Returns size of the array.
 
constexpr size_type max_size () const noexcept
 Returns the maximum size of the array.
 
constexpr bool empty () const noexcept
 Checks whether array is empty.
 
void fill (const_reference value)
 Fills array with specified value inside internal transaction. More...
 
template<std::size_t Size = N>
std::enable_if< Size !=0 >::type swap (array &other)
 Swaps content with other array's content inside internal transaction. More...
 
template<std::size_t Size = N>
std::enable_if< Size==0 >::type swap (array &other)
 Swap for zero-sized array.
 

Private Member Functions

template<std::size_t Size = N>
std::enable_if< Size !=0, T * >::type _get_data ()
 Support for non-zero sized array.
 
template<std::size_t Size = N>
std::enable_if< Size !=0, const T * >::type _get_data () const
 Support for non-zero sized array.
 
template<std::size_t Size = N>
std::enable_if< Size==0, T * >::type _get_data ()
 Support for zero sized array. More...
 
template<std::size_t Size = N>
std::enable_if< Size==0, const T * >::type _get_data () const
 Support for zero sized array.
 
pool_base _get_pool () const
 Check whether object is on pmem and return pool_base instance. More...
 

Detailed Description

template<typename T, std::size_t N>
struct pmem::obj::array< T, N >

pmem::obj::array - persistent container with std::array compatible interface.

pmem::obj::array can only be stored on pmem. Creating array on stack will result with "pool_error" exception.

All methods which allow write access to specific element will add it to an active transaction.

All methods which return non-const pointer to raw data add entire array to a transaction.

When a non-const iterator is returned it adds part of the array to a transaction while traversing.

Constructor & Destructor Documentation

◆ array()

template<typename T , std::size_t N>
pmem::obj::array< T, N >::array ( array< T, N > &&  )
default

Defaulted move constructor.

Performs member-wise move but do NOT add moved-from array to the transaction.

Member Function Documentation

◆ _get_data()

template<typename T , std::size_t N>
template<std::size_t Size = N>
std::enable_if<Size == 0, T *>::type pmem::obj::array< T, N >::_get_data ( )
inlineprivate

Support for zero sized array.

Return value is a unique address (address of the array itself);

◆ _get_pool()

template<typename T , std::size_t N>
pool_base pmem::obj::array< T, N >::_get_pool ( ) const
inlineprivate

Check whether object is on pmem and return pool_base instance.

Exceptions
pmem::pool_errorif an object is not in persistent memory.

◆ at() [1/2]

template<typename T , std::size_t N>
reference pmem::obj::array< T, N >::at ( size_type  n)
inline

Access element at specific index and add it to a transaction.

Exceptions
std::out_of_rangeif index is out of bound.
transaction_errorwhen adding the object to the transaction failed.

◆ at() [2/2]

template<typename T , std::size_t N>
const_reference pmem::obj::array< T, N >::at ( size_type  n) const
inline

Access element at specific index.

Exceptions
std::out_of_rangeif index is out of bound.

◆ back()

template<typename T , std::size_t N>
reference pmem::obj::array< T, N >::back ( )
inline

Access the last element and add this element to a transaction.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ begin()

template<typename T , std::size_t N>
iterator pmem::obj::array< T, N >::begin ( )
inline

Returns an iterator to the beginning.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ const_at()

template<typename T , std::size_t N>
const_reference pmem::obj::array< T, N >::const_at ( size_type  n) const
inline

Access element at specific index.

Exceptions
std::out_of_rangeif index is out of bound.

◆ crange()

template<typename T , std::size_t N>
slice<const_iterator> pmem::obj::array< T, N >::crange ( size_type  start,
size_type  n 
) const
inline

Returns const slice.

Parameters
[in]startstart index of requested range.
[in]nnumber of elements in range.
Returns
slice from start to start + n.
Exceptions
std::out_of_rangeif any element of the range would be outside of the array.

◆ data()

template<typename T , std::size_t N>
T* pmem::obj::array< T, N >::data ( )
inline

Returns raw pointer to the underlying data and adds entire array to a transaction.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ end()

template<typename T , std::size_t N>
iterator pmem::obj::array< T, N >::end ( )
inline

Returns an iterator to the end.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ fill()

template<typename T , std::size_t N>
void pmem::obj::array< T, N >::fill ( const_reference  value)
inline

Fills array with specified value inside internal transaction.

Exceptions
transaction_errorwhen adding the object to the transaction failed.
pmem::pool_errorif an object is not in persistent memory.

◆ front()

template<typename T , std::size_t N>
reference pmem::obj::array< T, N >::front ( )
inline

Access the first element and add this element to a transaction.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ operator=() [1/2]

template<typename T , std::size_t N>
array& pmem::obj::array< T, N >::operator= ( array< T, N > &&  other)
inline

Move assignment operator - perform move assignment from other pmem::obj::array.

This function creates a transaction internally.

Exceptions
transaction_errorwhen adding the object to the transaction failed.
pmem::pool_errorif an object is not in persistent memory.

◆ operator=() [2/2]

template<typename T , std::size_t N>
array& pmem::obj::array< T, N >::operator= ( const array< T, N > &  other)
inline

Copy assignment operator - perform assignment from other pmem::obj::array.

This function creates a transaction internally.

Exceptions
transaction_errorwhen adding the object to the transaction failed.
pmem::pool_errorif an object is not in persistent memory.

◆ operator[]() [1/2]

template<typename T , std::size_t N>
reference pmem::obj::array< T, N >::operator[] ( size_type  n)
inline

Access element at specific index and add it to a transaction.

No bounds checking is performed.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ operator[]() [2/2]

template<typename T , std::size_t N>
const_reference pmem::obj::array< T, N >::operator[] ( size_type  n) const
inline

Access element at specific index.

No bounds checking is performed.

◆ range() [1/3]

template<typename T , std::size_t N>
slice<pointer> pmem::obj::array< T, N >::range ( size_type  start,
size_type  n 
)
inline

Returns slice and snapshots requested range.

Parameters
[in]startstart index of requested range.
[in]nnumber of elements in range.
Returns
slice from start to start + n.
Exceptions
std::out_of_rangeif any element of the range would be outside of the array.

◆ range() [2/3]

template<typename T , std::size_t N>
slice<const_iterator> pmem::obj::array< T, N >::range ( size_type  start,
size_type  n 
) const
inline

Returns const slice.

Parameters
[in]startstart index of requested range.
[in]nnumber of elements in range.
Returns
slice from start to start + n.
Exceptions
std::out_of_rangeif any element of the range would be outside of the array.

◆ range() [3/3]

template<typename T , std::size_t N>
slice<range_snapshotting_iterator> pmem::obj::array< T, N >::range ( size_type  start,
size_type  n,
size_type  snapshot_size 
)
inline

Returns slice.

Parameters
[in]startstart index of requested range.
[in]nnumber of elements in range.
[in]snapshot_sizenumber of elements which should be snapshotted in a bulk while traversing this slice. If provided value is larger or equal to n, entire range is added to a transaction. If value is equal to 0 no snapshotting happens.
Returns
slice from start to start + n.
Exceptions
std::out_of_rangeif any element of the range would be outside of the array.

◆ rbegin()

template<typename T , std::size_t N>
reverse_iterator pmem::obj::array< T, N >::rbegin ( )
inline

Returns a reverse iterator to the beginning.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ rend()

template<typename T , std::size_t N>
reverse_iterator pmem::obj::array< T, N >::rend ( )
inline

Returns a reverse iterator to the end.

Exceptions
transaction_errorwhen adding the object to the transaction failed.

◆ swap()

template<typename T , std::size_t N>
template<std::size_t Size = N>
std::enable_if<Size != 0>::type pmem::obj::array< T, N >::swap ( array< T, N > &  other)
inline

Swaps content with other array's content inside internal transaction.

Exceptions
transaction_errorwhen adding the object to the transaction failed.
pmem::pool_errorif an object is not in persistent memory.

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