* raw_combined at the end.
*/
class buffer::raw_combined : public buffer::raw {
- size_t alignment;
public:
- raw_combined(char *dataptr, unsigned l, unsigned align,
- int mempool)
- : raw(dataptr, l, mempool),
- alignment(align) {
- }
- raw* clone_empty() override {
- return create(len, alignment).release();
+ raw_combined(char *dataptr, unsigned l, int mempool)
+ : raw(dataptr, l, mempool) {
}
static ceph::unique_leakable_ptr<buffer::raw>
// actual data first, since it has presumably larger alignment restriction
// then put the raw_combined at the end
return ceph::unique_leakable_ptr<buffer::raw>(
- new (ptr + datalen) raw_combined(ptr, len, align, mempool));
+ new (ptr + datalen) raw_combined(ptr, len, mempool));
}
static void operator delete(void *ptr) {
free(data);
bdout << "raw_malloc " << this << " free " << (void *)data << " " << bendl;
}
- raw* clone_empty() override {
- return new raw_malloc(len);
- }
};
#ifndef __CYGWIN__
class buffer::raw_posix_aligned : public buffer::raw {
- unsigned align;
public:
MEMPOOL_CLASS_HELPERS();
- raw_posix_aligned(unsigned l, unsigned _align) : raw(l) {
+ raw_posix_aligned(unsigned l, unsigned align) : raw(l) {
// posix_memalign() requires a multiple of sizeof(void *)
- align = std::max<unsigned>(_align, sizeof(void *));
+ align = std::max<unsigned>(align, sizeof(void *));
#ifdef DARWIN
data = (char *) valloc(len);
#else
aligned_free(data);
bdout << "raw_posix_aligned " << this << " free " << (void *)data << bendl;
}
- raw* clone_empty() override {
- return new raw_posix_aligned(len, align);
- }
};
#endif
#ifdef __CYGWIN__
class buffer::raw_hack_aligned : public buffer::raw {
- unsigned align;
char *realdata;
public:
- raw_hack_aligned(unsigned l, unsigned _align) : raw(l) {
- align = _align;
+ raw_hack_aligned(unsigned l, unsigned align) : raw(l) {
realdata = new char[len+align-1];
unsigned off = ((uintptr_t)realdata) & (align-1);
if (off)
~raw_hack_aligned() {
delete[] realdata;
}
- raw* clone_empty() {
- return new raw_hack_aligned(len, align);
- }
};
#endif
delete[] data;
bdout << "raw_char " << this << " free " << (void *)data << bendl;
}
- raw* clone_empty() override {
- return new raw_char(len);
- }
};
class buffer::raw_claimed_char : public buffer::raw {
bdout << "raw_claimed_char " << this << " free " << (void *)data
<< bendl;
}
- raw* clone_empty() override {
- return new raw_char(len);
- }
};
class buffer::raw_static : public buffer::raw {
raw_static(const char *d, unsigned l) : raw((char*)d, l) { }
~raw_static() override {}
- raw* clone_empty() override {
- return new buffer::raw_char(len);
- }
};
class buffer::raw_claim_buffer : public buffer::raw {
raw_claim_buffer(const char *b, unsigned l, deleter d)
: raw((char*)b, l), del(std::move(d)) { }
~raw_claim_buffer() override {}
- raw* clone_empty() override {
- return new buffer::raw_char(len);
- }
};
ceph::unique_leakable_ptr<buffer::raw> buffer::copy(const char *c, unsigned len) {
public:
raw_seastar_foreign_ptr(temporary_buffer&& buf)
: raw(buf.get_write(), buf.size()), ptr(std::move(buf)) {}
- raw* clone_empty() override {
- return create(len).release();
- }
};
class raw_seastar_local_ptr : public raw {
public:
raw_seastar_local_ptr(temporary_buffer&& buf)
: raw(buf.get_write(), buf.size()), buf(std::move(buf)) {}
- raw* clone_empty() override {
- return create(len).release();
- }
};
inline namespace v15_2_0 {
public:
raw_seastar_local_shared_ptr(temporary_buffer& buf)
: raw(buf.get_write(), buf.size()), buf(buf.share()) {}
- raw* clone_empty() override {
- return ceph::buffer::create(len).release();
- }
};
}