compressor/snappy: style cleanup

Signed-off-by: Sage Weil <sage@redhat.com>
This commit is contained in:
Sage Weil 2016-06-06 17:22:51 -04:00
parent 765a9d0e75
commit 21971b57ad

View File

@ -21,58 +21,69 @@
#include "compressor/Compressor.h" #include "compressor/Compressor.h"
class CEPH_BUFFER_API BufferlistSource : public snappy::Source { class CEPH_BUFFER_API BufferlistSource : public snappy::Source {
bufferlist::iterator pb; bufferlist::iterator pb;
size_t remaining; size_t remaining;
public: public:
explicit BufferlistSource(bufferlist::iterator _pb, size_t _input_len): pb(_pb), remaining(_input_len) { explicit BufferlistSource(bufferlist::iterator _pb, size_t _input_len)
remaining = MIN(remaining, pb.get_remaining()); : pb(_pb),
remaining(_input_len) {
remaining = std::min(remaining, (size_t)pb.get_remaining());
} }
virtual ~BufferlistSource() {} size_t Available() const override {
virtual size_t Available() const { return remaining; } return remaining;
virtual const char* Peek(size_t* len) { }
const char* data = NULL; const char *Peek(size_t *len) override {
const char *data = NULL;
*len = 0; *len = 0;
size_t avail = Available(); size_t avail = Available();
if(avail) { if (avail) {
auto ptmp = pb; auto ptmp = pb;
*len = ptmp.get_ptr_and_advance(avail, &data); *len = ptmp.get_ptr_and_advance(avail, &data);
} }
return data; return data;
} }
virtual void Skip(size_t n) { void Skip(size_t n) override {
assert(n <= remaining); assert(n <= remaining);
pb.advance(n); pb.advance(n);
remaining -= n; remaining -= n;
} }
bufferlist::iterator get_pos() const { return pb; }
bufferlist::iterator get_pos() const {
return pb;
}
}; };
class SnappyCompressor : public Compressor { class SnappyCompressor : public Compressor {
public: public:
SnappyCompressor() : Compressor("snappy") {} SnappyCompressor() : Compressor("snappy") {}
int compress(const bufferlist &src, bufferlist &dst) override { int compress(const bufferlist &src, bufferlist &dst) override {
BufferlistSource source(const_cast<bufferlist&>(src).begin(), src.length()); BufferlistSource source(const_cast<bufferlist&>(src).begin(), src.length());
bufferptr ptr = buffer::create_page_aligned( bufferptr ptr = buffer::create_page_aligned(
snappy::MaxCompressedLength(src.length())); snappy::MaxCompressedLength(src.length()));
snappy::UncheckedByteArraySink sink(ptr.c_str()); snappy::UncheckedByteArraySink sink(ptr.c_str());
snappy::Compress(&source, &sink); snappy::Compress(&source, &sink);
dst.append(ptr, 0, sink.CurrentDestination()-ptr.c_str()); dst.append(ptr, 0, sink.CurrentDestination() - ptr.c_str());
return 0; return 0;
} }
int decompress(const bufferlist &src, bufferlist &dst) override { int decompress(const bufferlist &src, bufferlist &dst) override {
bufferlist::iterator i = const_cast<bufferlist&>(src).begin(); bufferlist::iterator i = const_cast<bufferlist&>(src).begin();
return decompress(i, src.length(), dst); return decompress(i, src.length(), dst);
} }
int decompress(bufferlist::iterator &p, size_t compressed_len, bufferlist &dst) override {
int decompress(bufferlist::iterator &p,
size_t compressed_len,
bufferlist &dst) override {
size_t res_len = 0; size_t res_len = 0;
// Trick, decompress only need first 32bits buffer // Trick, decompress only need first 32bits buffer
bufferlist::const_iterator ptmp = p; bufferlist::const_iterator ptmp = p;
bufferlist tmp; bufferlist tmp;
ptmp.copy(4, tmp); ptmp.copy(4, tmp);
if (!snappy::GetUncompressedLength(tmp.c_str(), tmp.length(), &res_len)) if (!snappy::GetUncompressedLength(tmp.c_str(), tmp.length(), &res_len)) {
return -1; return -1;
}
BufferlistSource source(p, compressed_len); BufferlistSource source(p, compressed_len);
bufferptr ptr(res_len); bufferptr ptr(res_len);
if (snappy::RawUncompress(&source, ptr.c_str())) { if (snappy::RawUncompress(&source, ptr.c_str())) {