38 #ifndef PMEMOBJ_ALLOCATOR_HPP 39 #define PMEMOBJ_ALLOCATOR_HPP 46 #include "libpmemobj.h" 67 using reference = value_type &;
68 using const_reference =
const value_type &;
92 typename =
typename std::enable_if<
93 std::is_convertible<U *, T *>::value>::type>
110 detail::conditional_add_to_tx(
p.get());
111 new (
static_cast<void *
>(
p.get())) value_type(t);
122 template <
typename... Args>
126 detail::conditional_add_to_tx(
p.get());
127 new (
static_cast<void *
>(
p.get()))
128 value_type(std::forward<Args>(args)...);
142 if (pmemobj_tx_stage() == TX_STAGE_WORK) {
143 pmemobj_tx_add_range_direct((
void *)
p.get(),
sizeof(
p));
146 detail::destroy<value_type>(*p);
160 using value_type = void;
184 template <
typename U>
196 template <
typename T>
202 using value_type = T;
205 using size_type = std::size_t;
206 using bool_type = bool;
236 template <
typename U,
237 typename =
typename std::enable_if<
238 std::is_convertible<U *, T *>::value>::type>
254 if (pmemobj_tx_stage() != TX_STAGE_WORK)
256 "refusing to allocate " 257 "memory outside of transaction scope");
260 return pmemobj_tx_alloc(
sizeof(value_type) * cnt,
261 detail::type_num<T>());
274 if (pmemobj_tx_stage() != TX_STAGE_WORK)
277 "memory outside of transaction scope");
279 if (pmemobj_tx_free(*
p.raw_ptr()) != 0)
282 "persistent memory object");
293 return PMEMOBJ_MAX_ALLOC_SIZE /
sizeof(value_type);
306 using value_type = void;
309 using reference = value_type;
310 using const_reference =
const value_type;
311 using size_type = std::size_t;
312 using bool_type = bool;
342 template <
typename U>
357 if (pmemobj_tx_stage() != TX_STAGE_WORK)
359 "refusing to allocate " 360 "memory outside of transaction scope");
363 return pmemobj_tx_alloc(1 * cnt, 0);
376 if (pmemobj_tx_stage() != TX_STAGE_WORK)
379 "memory outside of transaction scope");
381 if (pmemobj_tx_free(
p.raw()) != 0)
384 "persistent memory object");
395 return PMEMOBJ_MAX_ALLOC_SIZE;
404 template <
typename T,
typename T2>
416 template <
typename T,
typename OtherAllocator>
430 template <
typename T,
typename Policy = standard_alloc_policy<T>,
431 typename Traits =
object_traits<T>>
437 using AllocationPolicy = Policy;
438 using TTraits = Traits;
444 using size_type =
typename AllocationPolicy::size_type;
445 using pointer =
typename AllocationPolicy::pointer;
446 using value_type =
typename AllocationPolicy::value_type;
451 template <
typename U>
478 template <
typename U>
486 template <
typename U,
typename P,
typename T2>
488 : Policy(rhs), Traits(rhs)
502 template <
typename T,
typename P,
typename Tr,
typename T2,
typename P2,
507 return operator==(static_cast<const P &>(lhs),
508 static_cast<const P2 &>(rhs));
520 template <
typename T,
typename P,
typename Tr,
typename OtherAllocator>
bool operator==(standard_alloc_policy< T > const &, standard_alloc_policy< T2 > const &)
Determines if memory from another allocator can be deallocated from this one.
Definition: allocator.hpp:406
pointer allocate(size_type cnt, const_pointer=0)
Allocate storage for cnt bytes.
Definition: allocator.hpp:355
(EXPERIMENTAL) Encapsulates the information about the persistent memory allocation model using PMDK's...
Definition: allocator.hpp:432
standard_alloc_policy(standard_alloc_policy< U > const &)
Type converting constructor.
Definition: allocator.hpp:239
allocator(allocator const &rhs)
Explicit copy constructor.
Definition: allocator.hpp:471
Persistent pointer class.
Definition: common.hpp:51
void deallocate(pointer p, size_type=0)
Deallocates storage pointed to p, which must be a value returned by a previous call to allocate that ...
Definition: allocator.hpp:374
allocator(allocator< U, P, T2 > const &rhs)
Type converting constructor.
Definition: allocator.hpp:487
object_traits(object_traits< U > const &)
Type converting constructor.
Definition: allocator.hpp:94
standard_alloc_policy()=default
Defaulted constructor.
standard_alloc_policy(standard_alloc_policy const &)
Explicit copy constructor.
Definition: allocator.hpp:229
Convenience extensions for the resides on pmem property template.
~standard_alloc_policy()=default
Defaulted destructor.
void destroy(pointer p)
Destroy an object based on a pointer.
Definition: allocator.hpp:139
Functions for destroying arrays.
Commonly used functionality.
void deallocate(pointer p, size_type=0)
Deallocates storage pointed to p, which must be a value returned by a previous call to allocate that ...
Definition: allocator.hpp:272
Rebind to a different type.
Definition: allocator.hpp:74
object_traits(object_traits< U > const &)
Type converting constructor.
Definition: allocator.hpp:185
The allocation policy template for a given type.
Definition: allocator.hpp:197
object_traits()=default
Defaulted constructor.
~object_traits()=default
Defaulted destructor.
standard_alloc_policy(standard_alloc_policy const &)
Explicit copy constructor.
Definition: allocator.hpp:335
allocator(allocator< U > const &)
Type converting constructor.
Definition: allocator.hpp:479
Rebind to a different type.
Definition: allocator.hpp:452
~allocator()=default
Defaulted destructor.
Rebind to a different type.
Definition: allocator.hpp:212
Persistent smart pointer.
pointer allocate(size_type cnt, const_void_pointer=0)
Allocate storage for cnt objects of type T.
Definition: allocator.hpp:252
Custom transaction error class.
Definition: pexceptions.hpp:94
Resides on pmem class.
Definition: p.hpp:64
size_type max_size() const
The largest value that can meaningfully be passed to allocate().
Definition: allocator.hpp:393
bool operator!=(const allocator< T, P, Tr > &lhs, const OtherAllocator &rhs)
Determines if memory from another allocator can be deallocated from this one.
Definition: allocator.hpp:522
Custom transaction error class.
Definition: pexceptions.hpp:104
Definition: allocator.hpp:48
Encapsulates object specific allocator functionality.
Definition: allocator.hpp:59
void construct(pointer p, Args &&... args)
Create an object at a specific address.
Definition: allocator.hpp:124
size_type max_size() const
The largest value that can meaningfully be passed to allocate().
Definition: allocator.hpp:291
void construct(pointer p, const_reference t)
Create an object at a specific address.
Definition: allocator.hpp:107
allocator()=default
Defaulted constructor.
standard_alloc_policy(standard_alloc_policy< U > const &)
Type converting constructor.
Definition: allocator.hpp:343