bdout << "ptr " << this << " get " << _raw << bendl;
}
}
+ buffer::ptr::ptr(ptr&& p) : _raw(p._raw), _off(p._off), _len(p._len)
+ {
+ p._raw = nullptr;
+ p._off = p._len = 0;
+ }
buffer::ptr::ptr(const ptr& p, unsigned o, unsigned l)
: _raw(p._raw), _off(p._off + o), _len(l)
{
push_back(bp);
}
+ void buffer::list::append(ptr&& bp)
+ {
+ if (bp.length())
+ push_back(std::move(bp));
+ }
+
void buffer::list::append(const ptr& bp, unsigned off, unsigned len)
{
assert(len+off <= bp.length());
}
}
// add new item to list
- ptr tempbp(bp, off, len);
- push_back(tempbp);
+ push_back(ptr(bp, off, len));
}
void buffer::list::append(const list& bl)
{
ptr bp(len);
bp.zero();
- append(bp);
+ append(std::move(bp));
}
bufferptr bp(length() * 4 / 3 + 3);
int l = ceph_armor(bp.c_str(), bp.c_str() + bp.length(), c_str(), c_str() + length());
bp.set_length(l);
- o.push_back(bp);
+ o.push_back(std::move(bp));
}
void buffer::list::decode_base64(buffer::list& e)
}
assert(l <= (int)bp.length());
bp.set_length(l);
- push_back(bp);
+ push_back(std::move(bp));
}
ssize_t ret = safe_read(fd, (void*)bp.c_str(), len);
if (ret >= 0) {
bp.set_length(ret);
- append(bp);
+ append(std::move(bp));
}
return ret;
}
{
#ifdef CEPH_HAVE_SPLICE
try {
- bufferptr bp = buffer::create_zero_copy(len, fd, NULL);
- append(bp);
+ append(buffer::create_zero_copy(len, fd, NULL));
} catch (buffer::error_code &e) {
return e.code;
} catch (buffer::malformed_input &e) {
ptr(unsigned l);
ptr(const char *d, unsigned l);
ptr(const ptr& p);
+ ptr(ptr&& p);
ptr(const ptr& p, unsigned o, unsigned l);
ptr& operator= (const ptr& p);
~ptr() {
_buffers.push_front(bp);
_len += bp.length();
}
+ void push_front(ptr&& bp) {
+ if (bp.length() == 0)
+ return;
+ _len += bp.length();
+ _buffers.push_front(std::move(bp));
+ }
void push_front(raw *r) {
- ptr bp(r);
- push_front(bp);
+ push_front(ptr(r));
}
void push_back(const ptr& bp) {
if (bp.length() == 0)
_buffers.push_back(bp);
_len += bp.length();
}
+ void push_back(ptr&& bp) {
+ if (bp.length() == 0)
+ return;
+ _len += bp.length();
+ _buffers.push_back(std::move(bp));
+ }
void push_back(raw *r) {
- ptr bp(r);
- push_back(bp);
+ push_back(ptr(r));
}
void zero();
append(s.data(), s.length());
}
void append(const ptr& bp);
+ void append(ptr&& bp);
void append(const ptr& bp, unsigned off, unsigned len);
void append(const list& bl);
void append(std::istream& in);