40 #ifndef PMEMOBJ_MAKE_PERSISTENT_ATOMIC_HPP 41 #define PMEMOBJ_MAKE_PERSISTENT_ATOMIC_HPP 48 #include "libpmemobj/atomic_base.h" 73 template <
typename T,
typename... Args>
79 std::tuple<Args &...> arg_pack{args...};
80 auto ret = pmemobj_alloc(
pool.get_handle(), ptr.
raw_ptr(),
sizeof(T),
81 detail::type_num<T>(),
82 &detail::obj_constructor<T, Args...>,
83 static_cast<void *
>(&arg_pack));
86 throw std::bad_alloc();
108 pmemobj_free(ptr.raw_ptr());
Persistent pointer class.
Definition: common.hpp:51
The non-template pool base class.
Definition: pool.hpp:65
PMEMobj pool class.
Definition: persistent_ptr.hpp:59
void delete_persistent_atomic(typename detail::pp_if_array< T >::type &ptr, std::size_t)
Atomically deallocate an array of objects.
Definition: make_persistent_array_atomic.hpp:129
Commonly used functionality.
Compile time type check for make_persistent.
Implementation details of atomic allocation and construction.
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
PMEMoid * raw_ptr() noexcept
Get pointer to PMEMoid encapsulated by this object.
Definition: persistent_ptr_base.hpp:309
Definition: allocator.hpp:48