module Tioga::Flate

Public Class Methods

compress(str) → string click to toggle source

Returns a compressed verion of str in a new string.

VALUE do_compress(VALUE klass, VALUE str) {
   str = rb_String(str);
   unsigned char *ptr = (unsigned char *)RSTRING_PTR(str);
   long len = RSTRING_LEN(str);
   unsigned long new_len = (len * 11) / 10 + 100;
   unsigned char *new_ptr = ALLOC_N(unsigned char, new_len);
   if (flate_compress(new_ptr, &new_len, ptr, len) != Z_OK) {
      free(new_ptr);
      rb_raise(rb_eArgError, "Error in Flate.compress");
   }
   VALUE new_str = rb_str_new((char *)new_ptr, new_len);
   free(new_ptr);
   return new_str;
}
expand(str) → string click to toggle source

Returns a decompressed verion of str in a new string. Assumes that str was compressed using Flate.compress.

VALUE do_expand(VALUE klass, VALUE str) {
   str = rb_String(str);
   unsigned char *ptr = (unsigned char *)RSTRING_PTR(str);
   long len = RSTRING_LEN(str);
   unsigned long new_len = len * 4 + 100;
   unsigned char *new_ptr = ALLOC_N(unsigned char, new_len);
   if (flate_expand(&new_ptr, &new_len, ptr, len) != Z_OK) {
      free(new_ptr);
      rb_raise(rb_eArgError, "Error in Flate.expand");
   }
   VALUE new_str = rb_str_new((char *)new_ptr, new_len);
   free(new_ptr);  
   return new_str;
}