module Zopfli

Constants

VERSION

Public Class Methods

deflate(p1, p2 = v2) click to toggle source
static VALUE
zopfli_deflate(int argc, VALUE *argv, VALUE self)
{
    zopfli_deflate_args_t args;
    VALUE in, out, opts;

    ZopfliInitOptions(&args.options);

    rb_scan_args(argc, argv, "11", &in, &opts);

    if (!NIL_P(opts)) {
        args.format = zopfli_deflate_parse_options(&args.options, opts);
    } else {
        args.format = DEFAULT_FORMAT;
    }

    StringValue(in);

    args.in = (unsigned char*)RSTRING_PTR(in);
    args.insize = RSTRING_LEN(in);

    args.out = NULL;
    args.outsize = 0;

#ifdef HAVE_RUBY_THREAD_H
    rb_thread_call_without_gvl(zopfli_deflate_no_gvl, (void *)&args, NULL, NULL);
#else
    zopfli_deflate_no_gvl((void *)&args);
#endif

    out = rb_str_new((const char*)args.out, args.outsize);

    free(args.out);

    return out;
}