40 #ifndef PMEMOBJ_MAKE_PERSISTENT_ARRAY_ATOMIC_HPP 41 #define PMEMOBJ_MAKE_PERSISTENT_ARRAY_ATOMIC_HPP 48 #include "libpmemobj/atomic_base.h" 73 typename detail::pp_if_array<T>::type &ptr,
76 typedef typename detail::pp_array_type<T>::type I;
78 auto ret = pmemobj_alloc(pool.get_handle(), ptr.raw_ptr(),
79 sizeof(I) * N, detail::type_num<I>(),
80 &detail::array_constructor<I>,
81 static_cast<void *
>(&N));
84 throw std::bad_alloc();
100 template <
typename T>
103 typename detail::pp_if_size_array<T>::type &ptr)
105 typedef typename detail::pp_array_type<T>::type I;
106 std::size_t N = detail::pp_array_elems<T>::elems;
108 auto ret = pmemobj_alloc(pool.get_handle(), ptr.raw_ptr(),
109 sizeof(I) * N, detail::type_num<I>(),
110 &detail::array_constructor<I>,
111 static_cast<void *
>(&N));
114 throw std::bad_alloc();
127 template <
typename T>
136 pmemobj_free(ptr.raw_ptr());
148 template <
typename T>
156 pmemobj_free(ptr.raw_ptr());
The non-template pool base class.
Definition: pool.hpp:64
Commonly used functionality.
Compile time type check for make_persistent.
Implementation details of atomic allocation and construction.
PMEMobj pool class.
Definition: persistent_ptr.hpp:55
void make_persistent_atomic(pool_base &pool, typename detail::pp_if_array< T >::type &ptr, std::size_t N)
Atomically allocate an array of objects.
Definition: make_persistent_array_atomic.hpp:72
void delete_persistent_atomic(typename detail::pp_if_array< T >::type &ptr, std::size_t N)
Atomically deallocate an array of objects.
Definition: make_persistent_array_atomic.hpp:129
Definition: condition_variable.hpp:48