This class serves similar purpose to pmem::obj::string, but keeps the data within the same allocation as inline_string itself.
More...
Inherits pmem::obj::experimental::basic_inline_string_base< CharT, Traits >.
template<typename CharT, typename Traits = std::char_traits<CharT>>
class pmem::obj::experimental::basic_dram_inline_string< CharT, Traits >
This class serves similar purpose to pmem::obj::string, but keeps the data within the same allocation as inline_string itself.
Unlike other containers, it can be used on pmem and dram. Modifiers (like assign()) can only be called if inline string is kept on pmem).
The data is always kept right after the inline_string structure. It means that creating an object of inline_string must be done as follows:
- Allocate memory of sizeof(inline_string) + size of the characters string + sizeof('\0')
- Use emplace new() to create inline_string
Example:
struct Object {
Object(int x, const char *s) : x(x), s(s)
{
}
int x;
};
struct root {
};
void
{
if (r->o)
return;
auto value = "example";
auto req_capacity =
sizeof(Object) + strlen(value) + sizeof('\0');
new (r->o.get()) Object(1, value);
});
std::cout << r->o->s.data() << std::endl;
}
void
{
auto new_value = "some new, longer value";
if (r->o->s.capacity() >= strlen(new_value)) {
r->o->s.assign(new_value);
} else {
auto ptr =
strlen(new_value) + 1));
new (ptr.get()) Object(r->o->x, new_value);
pmem::obj::delete_persistent<Object>(r->o);
r->o = ptr;
});
}
std::cout << r->o->s.data() << std::endl;
}
(EXPERIMENTAL) Encapsulates the information about the persistent memory allocation model using PMDK's...
Definition: allocator.hpp:446
static void run(obj::pool_base &pool, std::function< void()> tx, Locks &... locks)
Execute a closure-like transaction and lock locks.
Definition: transaction.hpp:694
This class serves similar purpose to pmem::obj::string, but keeps the data within the same allocation...
Definition: inline_string.hpp:154
Persistent pointer class.
Definition: persistent_ptr.hpp:152
PMEMobj pool class.
Definition: pool.hpp:482
persistent_ptr< T > root()
Retrieves pool's root object.
Definition: pool.hpp:644
pointer allocate(size_type cnt, const_void_pointer=0)
Allocate storage for cnt objects of type T.
Definition: allocator.hpp:242