38 #ifndef LIBPMEMOBJ_CPP_COMMON_HPP 39 #define LIBPMEMOBJ_CPP_COMMON_HPP 42 #include <libpmemobj/tx_base.h> 45 #if defined(__GNUC__) || defined(__clang__) 46 #define POBJ_CPP_DEPRECATED __attribute__((deprecated)) 47 #elif defined(_MSC_VER) 48 #define POBJ_CPP_DEPRECATED __declspec(deprecated) 50 #define POBJ_CPP_DEPRECATED 53 #if LIBPMEMOBJ_CPP_VG_ENABLED 54 #undef LIBPMEMOBJ_CPP_VG_PMEMCHECK_ENABLED 55 #undef LIBPMEMOBJ_CPP_VG_MEMCHECK_ENABLED 56 #undef LIBPMEMOBJ_CPP_VG_HELGRIND_ENABLED 57 #undef LIBPMEMOBJ_CPP_VG_DRD_ENABLED 59 #define LIBPMEMOBJ_CPP_VG_PMEMCHECK_ENABLED 1 60 #define LIBPMEMOBJ_CPP_VG_MEMCHECK_ENABLED 1 61 #define LIBPMEMOBJ_CPP_VG_HELGRIND_ENABLED 1 62 #define LIBPMEMOBJ_CPP_VG_DRD_ENABLED 1 65 #if LIBPMEMOBJ_CPP_VG_PMEMCHECK_ENABLED || \ 66 LIBPMEMOBJ_CPP_VG_MEMCHECK_ENABLED || \ 67 LIBPMEMOBJ_CPP_VG_HELGRIND_ENABLED || LIBPMEMOBJ_CPP_VG_DRD_ENABLED 68 #define LIBPMEMOBJ_CPP_ANY_VG_TOOL_ENABLED 1 71 #if LIBPMEMOBJ_CPP_ANY_VG_TOOL_ENABLED 75 #if LIBPMEMOBJ_CPP_VG_PMEMCHECK_ENABLED 76 #include <pmemcheck.h> 79 #if LIBPMEMOBJ_CPP_VG_MEMCHECK_ENABLED 83 #if LIBPMEMOBJ_CPP_VG_HELGRIND_ENABLED 87 #if LIBPMEMOBJ_CPP_VG_DRD_ENABLED 98 #if !defined(__clang__) && defined(__GNUG__) && __GNUC__ < 5 99 #define IS_TRIVIALLY_COPYABLE(T) __has_trivial_copy(T) 101 #define IS_TRIVIALLY_COPYABLE(T) std::is_trivially_copyable<T>::value 109 template <
typename T>
126 template <
typename T>
128 conditional_add_to_tx(
const T *that, std::size_t count = 1)
133 if (pmemobj_tx_stage() != TX_STAGE_WORK)
137 if (!pmemobj_pool_by_ptr(that))
140 if (pmemobj_tx_add_range_direct(that,
sizeof(*that) * count))
142 "Could not add object(s) to the transaction.");
148 template <
typename T>
152 return typeid(T).hash_code();
Persistent pointer class.
Definition: common.hpp:110
uint64_t next_pow_2(uint64_t v)
Round up to the next lowest power of 2.
Definition: common.hpp:159
Custom transaction error class.
Definition: pexceptions.hpp:63
Definition: allocation_flag.hpp:43