PMDK C++ bindings  1.13.0-git107.g7e59f08f
This is the C++ bindings documentation for PMDK's libpmemobj.
pmem::obj::array< T, N > Struct Template Reference

Persistent container with std::array compatible interface. More...

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

Public Types

using value_type = T
 
using pointer = value_type *
 
using const_pointer = const value_type *
 
using reference = value_type &
 
using const_reference = const value_type &
 
using iterator = pmem::detail::basic_contiguous_iterator< T >
 
using const_iterator = const_pointer
 
using size_type = std::size_t
 
using difference_type = std::ptrdiff_t
 
using reverse_iterator = std::reverse_iterator< iterator >
 
using const_reverse_iterator = std::reverse_iterator< const_iterator >
 
using range_snapshotting_iterator = pmem::detail::range_snapshotting_iterator< T >
 

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.
 

Public Attributes

standard_array_traits< T, N >::type _data
 

Related Functions

(Note that these are not member functions.)

template<typename T , std::size_t N>
bool operator== (const array< T, N > &lhs, const array< T, N > &rhs)
 Non-member equal operator.
 
template<typename T , std::size_t N>
bool operator!= (const array< T, N > &lhs, const array< T, N > &rhs)
 Non-member not-equal operator.
 
template<typename T , std::size_t N>
bool operator< (const array< T, N > &lhs, const array< T, N > &rhs)
 Non-member less than operator.
 
template<typename T , std::size_t N>
bool operator> (const array< T, N > &lhs, const array< T, N > &rhs)
 Non-member greater than operator.
 
template<typename T , std::size_t N>
bool operator>= (const array< T, N > &lhs, const array< T, N > &rhs)
 Non-member greater or equal operator.
 
template<typename T , std::size_t N>
bool operator<= (const array< T, N > &lhs, const array< T, N > &rhs)
 Non-member less or equal operator.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_iterator cbegin (const pmem::obj::array< T, N > &a)
 Non-member cbegin.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_iterator cend (const pmem::obj::array< T, N > &a)
 Non-member cend.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_reverse_iterator crbegin (const pmem::obj::array< T, N > &a)
 Non-member crbegin.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_reverse_iterator crend (const pmem::obj::array< T, N > &a)
 Non-member crend.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::iterator begin (pmem::obj::array< T, N > &a)
 Non-member begin.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_iterator begin (const pmem::obj::array< T, N > &a)
 Non-member begin.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::iterator end (pmem::obj::array< T, N > &a)
 Non-member end.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_iterator end (const pmem::obj::array< T, N > &a)
 Non-member end.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::reverse_iterator rbegin (pmem::obj::array< T, N > &a)
 Non-member rbegin.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_reverse_iterator rbegin (const pmem::obj::array< T, N > &a)
 Non-member rbegin.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::reverse_iterator rend (pmem::obj::array< T, N > &a)
 Non-member rend.
 
template<typename T , std::size_t N>
pmem::obj::array< T, N >::const_reverse_iterator rend (const pmem::obj::array< T, N > &a)
 Non-member rend.
 
template<typename T , size_t N>
void swap (pmem::obj::array< T, N > &lhs, pmem::obj::array< T, N > &rhs)
 Non-member swap function.
 
template<size_t I, typename T , size_t N>
T & get (pmem::obj::array< T, N > &a)
 Non-member get function.
 
template<size_t I, typename T , size_t N>
T && get (pmem::obj::array< T, N > &&a)
 Non-member get function.
 
template<size_t I, typename T , size_t N>
const T & get (const pmem::obj::array< T, N > &a) noexcept
 Non-member get function.
 
template<size_t I, typename T , size_t N>
const T && get (const pmem::obj::array< T, N > &&a) noexcept
 Non-member get function.
 

Detailed Description

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

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.

Note
According to changes in C++ standard, pmem::obj::array is not an aggregate since C++20.
Since C++20 pmem::obj::array cannot be initialized via constructor for types with deleted copy constructor. This may change in the future.
Since C++20 pmem::obj::array for const types can be initialized only via default constructor. This may change in the future.

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

◆ 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
pmem::obj::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 internally creates a transaction.

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 internally creates a transaction.

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
pmem::obj::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
pmem::obj::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
pmem::obj::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: