38 #ifndef LIBPMEMOBJ_CPP_POOL_HPP 39 #define LIBPMEMOBJ_CPP_POOL_HPP 49 #include <libpmemobj/pool_base.h> 83 explicit pool_base(pmemobjpool *cpop) noexcept : pop(cpop)
128 pmemobjpool *pop = pmemobj_openU(path.c_str(), layout.c_str());
130 pmemobjpool *pop = pmemobj_open(path.c_str(), layout.c_str());
134 .with_pmemobj_errormsg();
156 create(
const std::string &path,
const std::string &layout,
157 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
160 pmemobjpool *pop = pmemobj_createU(path.c_str(), layout.c_str(),
163 pmemobjpool *pop = pmemobj_create(path.c_str(), layout.c_str(),
168 .with_pmemobj_errormsg();
184 check(
const std::string &path,
const std::string &layout) noexcept
187 return pmemobj_checkU(path.c_str(), layout.c_str());
189 return pmemobj_check(path.c_str(), layout.c_str());
208 open(
const std::wstring &path,
const std::wstring &layout)
210 pmemobjpool *pop = pmemobj_openW(path.c_str(), layout.c_str());
213 .with_pmemobj_errormsg();
236 create(
const std::wstring &path,
const std::wstring &layout,
237 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
239 pmemobjpool *pop = pmemobj_createW(path.c_str(), layout.c_str(),
243 .with_pmemobj_errormsg();
260 check(
const std::wstring &path,
const std::wstring &layout) noexcept
262 return pmemobj_checkW(path.c_str(), layout.c_str());
274 if (this->pop ==
nullptr)
275 throw std::logic_error(
"Pool already closed");
277 pmemobj_close(this->pop);
288 persist(
const void *addr,
size_t len) noexcept
290 pmemobj_persist(this->pop, addr, len);
298 template <
typename Y>
302 pmemobj_persist(this->pop, &prop,
sizeof(Y));
310 template <
typename Y>
314 pmemobj_persist(this->pop, &ptr,
sizeof(ptr));
324 flush(
const void *addr,
size_t len) noexcept
326 pmemobj_flush(this->pop, addr, len);
334 template <
typename Y>
338 pmemobj_flush(this->pop, &prop,
sizeof(Y));
346 template <
typename Y>
350 pmemobj_flush(this->pop, &ptr,
sizeof(ptr));
359 pmemobj_drain(this->pop);
375 return pmemobj_memcpy_persist(this->pop, dest, src, len);
391 return pmemobj_memset_persist(this->pop, dest, c, len);
407 POBJ_CPP_DEPRECATED PMEMobjpool *
408 get_handle() noexcept
419 static const int DEFAULT_MODE = S_IWUSR | S_IRUSR;
422 static const int DEFAULT_MODE = S_IWRITE | S_IREAD;
434 template <
typename T>
435 class pool :
public pool_base {
440 pool() noexcept = default;
445 pool(const
pool &) noexcept = default;
455 pool &operator=(const
pool &) noexcept = default;
460 pool &operator=(
pool &&) noexcept = default;
465 ~
pool() noexcept = default;
491 template <
typename M>
495 return ctl_get_detail<M>(pop, name);
509 template <
typename M>
513 return ctl_set_detail(pop, name, arg);
527 template <
typename M>
531 return ctl_exec_detail(pop, name, arg);
545 template <
typename M>
549 return ctl_get_detail<M>(pop, name);
563 template <
typename M>
567 return ctl_set_detail(pop, name, arg);
581 template <
typename M>
585 return ctl_exec_detail(pop, name, arg);
623 open(
const std::string &path,
const std::string &layout)
645 create(
const std::string &path,
const std::string &layout,
646 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
662 check(
const std::string &path,
const std::string &layout)
682 open(
const std::wstring &path,
const std::wstring &layout)
705 create(
const std::wstring &path,
const std::wstring &layout,
706 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
723 check(
const std::wstring &path,
const std::wstring &layout)
740 template <
typename T>
744 return ctl_get_detail<T>(
nullptr, name);
758 template <
typename T>
762 return ctl_set_detail(
nullptr, name, arg);
776 template <
typename T>
780 return ctl_exec_detail(
nullptr, name, arg);
794 template <
typename T>
798 return ctl_get_detail<T>(
nullptr, name);
812 template <
typename T>
816 return ctl_set_detail(
nullptr, name, arg);
830 template <
typename T>
834 return ctl_exec_detail(
nullptr, name, arg);
M ctl_exec(const std::string &name, M arg)
Execute function at pool scope.
Definition: pool.hpp:529
pool() noexcept=default
Defaulted constructor.
static int check(const std::string &path, const std::string &layout) noexcept
Checks if a given pool is consistent.
Definition: pool.hpp:184
T ctl_get(const std::string &name)
Query libpmemobj state at global scope.
Definition: pool.hpp:742
void persist(const persistent_ptr< Y > &ptr) noexcept
Performs persist operation on a given persistent object.
Definition: pool.hpp:312
Persistent pointer class.
Definition: common.hpp:125
persistent_ptr< T > root()
Retrieves pool's root object.
Definition: pool.hpp:595
The non-template pool base class.
Definition: pool.hpp:67
pool(pool_base &&pb) noexcept
Defaulted move constructor.
Definition: pool.hpp:477
void flush(const p< Y > &prop) noexcept
Performs flush operation on a given pmem property.
Definition: pool.hpp:336
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:373
Custom pool error class.
Definition: pexceptions.hpp:72
static pool_base open(const std::wstring &path, const std::wstring &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:208
A persistent version of concurrent hash map implementation Ref: https://arxiv.org/abs/1509....
Definition: concurrent_hash_map.hpp:65
static pool< T > open(const std::string &path, const std::string &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:623
Resides on pmem property template.
PMEMobj pool class.
Definition: persistent_ptr.hpp:59
PMEMobjpool * handle() noexcept
Gets the C style handle to the pool.
Definition: pool.hpp:402
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:156
M ctl_get(const std::string &name)
Query libpmemobj state at pool scope.
Definition: pool.hpp:493
Commonly used functionality.
static pool_base open(const std::string &path, const std::string &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:125
T ctl_exec(const std::string &name, T arg)
Execute function at global scope.
Definition: pool.hpp:778
void persist(const void *addr, size_t len) noexcept
Performs persist operation on a given chunk of memory.
Definition: pool.hpp:288
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:389
M ctl_set(const std::wstring &name, M arg)
Modify libpmemobj state at pool scope.
Definition: pool.hpp:565
static int check(const std::wstring &path, const std::wstring &layout)
Checks if a given pool is consistent.
Definition: pool.hpp:723
M ctl_set(const std::string &name, M arg)
Modify libpmemobj state at pool scope.
Definition: pool.hpp:511
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:645
M ctl_get(const std::wstring &name)
Query libpmemobj state at pool scope.
Definition: pool.hpp:547
void flush(const persistent_ptr< Y > &ptr) noexcept
Performs flush operation on a given persistent object.
Definition: pool.hpp:348
static int check(const std::wstring &path, const std::wstring &layout) noexcept
Checks if a given pool is consistent.
Definition: pool.hpp:260
void persist(const p< Y > &prop) noexcept
Performs persist operation on a given pmem property.
Definition: pool.hpp:300
pool_base() noexcept
Defaulted constructor.
Definition: pool.hpp:72
pool_base(pmemobjpool *cpop) noexcept
Explicit constructor.
Definition: pool.hpp:83
T ctl_set(const std::string &name, T arg)
Modify libpmemobj state at global scope.
Definition: pool.hpp:760
static int check(const std::string &path, const std::string &layout)
Checks if a given pool is consistent.
Definition: pool.hpp:662
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:236
Resides on pmem class.
Definition: p.hpp:64
A persistent version of concurrent hash map implementation Ref: https://arxiv.org/abs/1509....
Definition: allocation_flag.hpp:43
void drain(void) noexcept
Performs drain operation.
Definition: pool.hpp:357
void flush(const void *addr, size_t len) noexcept
Performs flush operation on a given chunk of memory.
Definition: pool.hpp:324
static pool< T > open(const std::wstring &path, const std::wstring &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:682
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:705
M ctl_exec(const std::wstring &name, M arg)
Execute function at pool scope.
Definition: pool.hpp:583
void close()
Closes the pool.
Definition: pool.hpp:272