38 #ifndef PMEMOBJ_POOL_HPP 39 #define PMEMOBJ_POOL_HPP 47 #include "libpmemobj/pool_base.h" 81 explicit pool_base(pmemobjpool *cpop) noexcept : pop(cpop)
126 pmemobjpool *pop = pmemobj_openU(path.c_str(), layout.c_str());
128 pmemobjpool *pop = pmemobj_open(path.c_str(), layout.c_str());
153 create(
const std::string &path,
const std::string &layout,
154 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
157 pmemobjpool *pop = pmemobj_createU(path.c_str(), layout.c_str(),
160 pmemobjpool *pop = pmemobj_create(path.c_str(), layout.c_str(),
180 check(
const std::string &path,
const std::string &layout) noexcept
183 return pmemobj_checkU(path.c_str(), layout.c_str());
185 return pmemobj_check(path.c_str(), layout.c_str());
204 open(
const std::wstring &path,
const std::wstring &layout)
206 pmemobjpool *pop = pmemobj_openW(path.c_str(), layout.c_str());
231 create(
const std::wstring &path,
const std::wstring &layout,
232 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
234 pmemobjpool *pop = pmemobj_createW(path.c_str(), layout.c_str(),
254 check(
const std::wstring &path,
const std::wstring &layout) noexcept
256 return pmemobj_checkW(path.c_str(), layout.c_str());
268 if (this->pop ==
nullptr)
269 throw std::logic_error(
"Pool already closed");
271 pmemobj_close(this->pop);
282 persist(
const void *addr,
size_t len) noexcept
284 pmemobj_persist(this->pop, addr, len);
292 template <
typename Y>
296 pmemobj_persist(this->pop, &prop,
sizeof(Y));
304 template <
typename Y>
308 pmemobj_persist(this->pop, &ptr,
sizeof(ptr));
318 flush(
const void *addr,
size_t len) noexcept
320 pmemobj_flush(this->pop, addr, len);
328 template <
typename Y>
332 pmemobj_flush(this->pop, &prop,
sizeof(Y));
340 template <
typename Y>
344 pmemobj_flush(this->pop, &ptr,
sizeof(ptr));
353 pmemobj_drain(this->pop);
369 return pmemobj_memcpy_persist(this->pop, dest, src, len);
385 return pmemobj_memset_persist(this->pop, dest, c, len);
396 get_handle() noexcept
407 static const int DEFAULT_MODE = S_IWUSR | S_IRUSR;
410 static const int DEFAULT_MODE = S_IWRITE | S_IREAD;
422 template <
typename T>
423 class pool :
public pool_base {
428 pool() noexcept = default;
433 pool(const
pool &) noexcept = default;
443 pool &operator=(const
pool &) noexcept = default;
448 pool &operator=(
pool &&) noexcept = default;
453 ~
pool() noexcept = default;
497 open(
const std::string &path,
const std::string &layout)
519 create(
const std::string &path,
const std::string &layout,
520 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
536 check(
const std::string &path,
const std::string &layout)
556 open(
const std::wstring &path,
const std::wstring &layout)
579 create(
const std::wstring &path,
const std::wstring &layout,
580 std::size_t size = PMEMOBJ_MIN_POOL, mode_t mode = DEFAULT_MODE)
597 check(
const std::wstring &path,
const std::wstring &layout)
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:180
void persist(const persistent_ptr< Y > &ptr) noexcept
Performs persist operation on a given persistent object.
Definition: pool.hpp:306
Persistent pointer class.
Definition: common.hpp:51
The non-template pool base class.
Definition: pool.hpp:65
pool(pool_base &&pb) noexcept
Defaulted move constructor.
Definition: pool.hpp:465
void flush(const p< Y > &prop) noexcept
Performs flush operation on a given pmem property.
Definition: pool.hpp:330
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:367
Custom pool error class.
Definition: pexceptions.hpp:53
static pool_base open(const std::wstring &path, const std::wstring &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:204
static pool< T > open(const std::string &path, const std::string &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:497
Resides on pmem property template.
PMEMobj pool class.
Definition: persistent_ptr.hpp:59
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:153
static pool_base open(const std::string &path, const std::string &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:123
void persist(const void *addr, size_t len) noexcept
Performs persist operation on a given chunk of memory.
Definition: pool.hpp:282
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:383
persistent_ptr< T > get_root()
Retrieves pool's root object.
Definition: pool.hpp:475
static int check(const std::wstring &path, const std::wstring &layout)
Checks if a given pool is consistent.
Definition: pool.hpp:597
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:519
void flush(const persistent_ptr< Y > &ptr) noexcept
Performs flush operation on a given persistent object.
Definition: pool.hpp:342
static int check(const std::wstring &path, const std::wstring &layout) noexcept
Checks if a given pool is consistent.
Definition: pool.hpp:254
void persist(const p< Y > &prop) noexcept
Performs persist operation on a given pmem property.
Definition: pool.hpp:294
pool_base() noexcept
Defaulted constructor.
Definition: pool.hpp:70
pool_base(pmemobjpool *cpop) noexcept
Explicit constructor.
Definition: pool.hpp:81
static int check(const std::string &path, const std::string &layout)
Checks if a given pool is consistent.
Definition: pool.hpp:536
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:231
Resides on pmem class.
Definition: p.hpp:64
Definition: allocator.hpp:48
void drain(void) noexcept
Performs drain operation.
Definition: pool.hpp:351
void flush(const void *addr, size_t len) noexcept
Performs flush operation on a given chunk of memory.
Definition: pool.hpp:318
static pool< T > open(const std::wstring &path, const std::wstring &layout)
Opens an existing object store memory pool.
Definition: pool.hpp:556
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:579
void close()
Closes the pool.
Definition: pool.hpp:266