38 #ifndef PMEMOBJ_POOL_HPP
39 #define PMEMOBJ_POOL_HPP
46 #include "libpmemobj/pool_base.h"
80 explicit pool_base(pmemobjpool *cpop) noexcept : pop(cpop)
122 open(const std::
string &path, const std::
string &layout)
125 pmemobjpool *pop = pmemobj_openU(path.c_str(), layout.c_str());
127 pmemobjpool *pop = pmemobj_open(path.c_str(), layout.c_str());
152 create(
const std::string &path,
const std::string &layout,
153 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
156 pmemobjpool *pop = pmemobj_createU(path.c_str(), layout.c_str(),
159 pmemobjpool *pop = pmemobj_create(path.c_str(), layout.c_str(),
179 check(
const std::string &path,
const std::string &layout) noexcept
182 return pmemobj_checkU(path.c_str(), layout.c_str());
184 return pmemobj_check(path.c_str(), layout.c_str());
203 open(
const std::wstring &path,
const std::wstring &layout)
205 pmemobjpool *pop = pmemobj_openW(path.c_str(), layout.c_str());
230 create(
const std::wstring &path,
const std::wstring &layout,
231 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
233 pmemobjpool *pop = pmemobj_createW(path.c_str(), layout.c_str(),
253 check(
const std::wstring &path,
const std::wstring &layout) noexcept
255 return pmemobj_checkW(path.c_str(), layout.c_str());
267 if (this->pop ==
nullptr)
268 throw std::logic_error(
"Pool already closed");
270 pmemobj_close(this->pop);
281 persist(
const void *addr,
size_t len) noexcept
283 pmemobj_persist(this->pop, addr, len);
291 template <
typename Y>
295 pmemobj_persist(this->pop, &prop,
sizeof(Y));
303 template <
typename Y>
307 pmemobj_persist(this->pop, &ptr,
sizeof(ptr));
317 flush(
const void *addr,
size_t len) noexcept
319 pmemobj_flush(this->pop, addr, len);
327 template <
typename Y>
331 pmemobj_flush(this->pop, &prop,
sizeof(Y));
339 template <
typename Y>
343 pmemobj_flush(this->pop, &ptr,
sizeof(ptr));
352 pmemobj_drain(this->pop);
368 return pmemobj_memcpy_persist(this->pop, dest, src, len);
384 return pmemobj_memset_persist(this->pop, dest, c, len);
395 get_handle() noexcept
406 static const int DEFAULT_MODE = S_IWUSR | S_IRUSR;
409 static const int DEFAULT_MODE = S_IWRITE | S_IREAD;
421 template <
typename T>
422 class pool :
public pool_base {
427 pool() noexcept = default;
432 pool(const
pool &) noexcept = default;
442 pool &operator=(const
pool &) noexcept = default;
447 pool &operator=(
pool &&) noexcept = default;
452 ~
pool() noexcept = default;
496 open(
const std::string &path,
const std::string &layout)
518 create(
const std::string &path,
const std::string &layout,
519 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
535 check(
const std::string &path,
const std::string &layout)
555 open(
const std::wstring &path,
const std::wstring &layout)
578 create(
const std::wstring &path,
const std::wstring &layout,
579 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
596 check(
const std::wstring &path,
const std::wstring &layout)
static pool< T > create(const std::string &path, const std::string &layout, std::size_t size=PMEMOBJ_MIN_POOL, mode_t mode=DEFAULT_MODE)
Creates a new transactional object store pool.
Definition: pool.hpp:518
Persistent pointer class.
Definition: common.hpp:51
void flush(const p< Y > &prop) noexcept
Performs flush operation on a given pmem property.
Definition: pool.hpp:329
static pool_base open(const std::wstring &path, const std::wstring &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:203
static int check(const std::wstring &path, const std::wstring &layout)
Checks if a given pool is consistent.
Definition: pool.hpp:596
The non-template pool base class.
Definition: pool.hpp:64
Resides on pmem property template.
pool_base() noexcept
Defaulted constructor.
Definition: pool.hpp:69
void persist(const persistent_ptr< Y > &ptr) noexcept
Performs persist operation on a given persistent object.
Definition: pool.hpp:305
static pool< T > create(const std::wstring &path, const std::wstring &layout, std::size_t size=PMEMOBJ_MIN_POOL, mode_t mode=DEFAULT_MODE)
Creates a new transactional object store pool.
Definition: pool.hpp:578
pool(pool_base &&pb) noexcept
Defaulted move constructor.
Definition: pool.hpp:464
void flush(const persistent_ptr< Y > &ptr) noexcept
Performs flush operation on a given persistent object.
Definition: pool.hpp:341
static int check(const std::wstring &path, const std::wstring &layout) noexcept
Checks if a given pool is consistent.
Definition: pool.hpp:253
pool() noexcept=default
Defaulted constructor.
static int check(const std::string &path, const std::string &layout)
Checks if a given pool is consistent.
Definition: pool.hpp:535
PMEMobj pool class.
Definition: persistent_ptr.hpp:59
void flush(const void *addr, size_t len) noexcept
Performs flush operation on a given chunk of memory.
Definition: pool.hpp:317
static pool< T > open(const std::wstring &path, const std::wstring &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:555
static int check(const std::string &path, const std::string &layout) noexcept
Checks if a given pool is consistent.
Definition: pool.hpp:179
void persist(const void *addr, size_t len) noexcept
Performs persist operation on a given chunk of memory.
Definition: pool.hpp:281
void persist(const p< Y > &prop) noexcept
Performs persist operation on a given pmem property.
Definition: pool.hpp:293
persistent_ptr< T > get_root()
Retrieves pool's root object.
Definition: pool.hpp:474
static pool_base open(const std::string &path, const std::string &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:122
Resides on pmem class.
Definition: p.hpp:64
void * memset_persist(void *dest, int c, size_t len) noexcept
Performs memset and persist operation on a given chunk of memory.
Definition: pool.hpp:382
static pool_base create(const std::wstring &path, const std::wstring &layout, std::size_t size=PMEMOBJ_MIN_POOL, mode_t mode=DEFAULT_MODE)
Creates a new transactional object store pool.
Definition: pool.hpp:230
void drain(void) noexcept
Performs drain operation.
Definition: pool.hpp:350
static pool_base create(const std::string &path, const std::string &layout, std::size_t size=PMEMOBJ_MIN_POOL, mode_t mode=DEFAULT_MODE)
Creates a new transactional object store pool.
Definition: pool.hpp:152
void close()
Closes the pool.
Definition: pool.hpp:265
pool_base(pmemobjpool *cpop) noexcept
Explicit constructor.
Definition: pool.hpp:80
static pool< T > open(const std::string &path, const std::string &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:496
void * memcpy_persist(void *dest, const void *src, size_t len) noexcept
Performs memcpy and persist operation on a given chunk of memory.
Definition: pool.hpp:366
Custom pool error class.
Definition: pexceptions.hpp:53