Sha256: 687845d1e856c03b9d43fe43d3e8f41fddc75a3db8b164bf3cbcf6fca6541711

Contents?: true

Size: 1.07 KB

Versions: 1

Compression:

Stored size: 1.07 KB

Contents

#include "ruby.h"
#include "snappy.h"

static VALUE rb_mSnappy;
static ID    i_to_s;

static VALUE
snappy_deflate(VALUE self, VALUE source)
{
    snappy::string output;
    size_t  output_length;

    source = rb_funcall(source, i_to_s, 0);
    output_length = snappy::Compress(RSTRING_PTR(source), RSTRING_LEN(source), &output);

    return rb_str_new(output.data(), output_length);
}

static VALUE
snappy_inflate(VALUE self, VALUE source)
{
    snappy::string output;

    source = rb_funcall(source, i_to_s, 0);
    if (!snappy::IsValidCompressedBuffer(RSTRING_PTR(source), RSTRING_LEN(source)) ||
        !snappy::Uncompress(RSTRING_PTR(source), RSTRING_LEN(source), &output)) {
        rb_raise(rb_eRuntimeError, "Couldn't inflate");
    }

    return rb_str_new(output.data(), output.size());
}

extern "C" {
void Init_snappy()
{
    rb_mSnappy = rb_define_module("Snappy");
    rb_define_singleton_method(rb_mSnappy, "deflate", (VALUE (*)(...))snappy_deflate, 1);
    rb_define_singleton_method(rb_mSnappy, "inflate", (VALUE (*)(...))snappy_inflate, 1);

    i_to_s = rb_intern("to_s");
}
}

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
snappy-0.0.0 ext/snappy.cc