15const DBArrayAlloc::size_type DBArrayAlloc::_empty_buf[2] = { 0, 0 };
18 return std::max(
sizeof(DBArrayAlloc::size_type), align);
25static void*
Adjust(
void* p, ptrdiff_t off) {
26 return reinterpret_cast<void*
>(
reinterpret_cast<intptr_t
>(p) + off);
29void* DBArrayAlloc::alloc(size_type size, size_type field_size, size_type align) {
30 if (field_size == 0) {
33 assert(align <=
alignof(std::max_align_t));
34 auto* raw = ::operator
new(
AllocSize(size, align));
36 *get_size_ptr(p) = field_size;
37#ifdef LCF_DEBUG_DBARRAY
38 std::cout <<
"DBArray: Allocated"
40 <<
" field_size=" << *get_size_ptr(p)
49void DBArrayAlloc::free(
void* p, size_type align)
noexcept {
51 if (p != empty_buf()) {
53#ifdef LCF_DEBUG_DBARRAY
54 std::cout <<
"DBArray: Free"
58 <<
" field_size=" << *get_size_ptr(p)
61 ::operator
delete(raw);
65char* DBString::construct_z(
const char* s,
size_t len) {
68 std::memcpy(p, s, len + 1);
73char* DBString::construct_sv(
const char* s,
size_t len) {
76 std::memcpy(p, s, len);
82DBString& DBString::operator=(
const DBString& o) {
85 _storage = construct_z(o.data(), o.size());