Compress-Deflate7

 view release on metacpan or  search on metacpan

Deflate7.xs  view on Meta::CPAN

  hr = c->SetCoderProperties(&cyclProp, &v, 1);
  if (hr != S_OK)
    croak("Bad cycles value");
}

SV* internalZlib7(const char* data, size_t len, unsigned int algo, unsigned int pass, unsigned int fast, unsigned int cycles) {

  NCompress::NZlib::CEncoder c;
  CBufInStream* inStream = new CBufInStream;
  CDynBufSeqOutStream* outStream = new CDynBufSeqOutStream;

  inStream->Init((const Byte*)data, len);

  CMyComPtr<ISequentialInStream> in(inStream);
  CMyComPtr<ISequentialOutStream> out(outStream);

  c.Create();

  setCoderProps(c.DeflateEncoderSpec, algo, pass, fast, cycles);

  c.Code(in, out, NULL, NULL, NULL);

  const char* deflated = (const char*)outStream->GetBuffer();
  return newSVpvn(deflated, outStream->GetSize());
}

SV* internalDeflate7(const char* data, size_t len, unsigned int algo, unsigned int pass, unsigned int fast, unsigned int cycles) {

  // TODO: Factor the common code

  NCompress::NDeflate::NEncoder::CCOMCoder c;
  CBufInStream* inStream = new CBufInStream;
  CDynBufSeqOutStream* outStream = new CDynBufSeqOutStream;

  inStream->Init((const Byte*)data, len);

  CMyComPtr<ISequentialInStream> in(inStream);
  CMyComPtr<ISequentialOutStream> out(outStream);

  setCoderProps(&c, algo, pass, fast, cycles);

  c.Code(in, out, NULL, NULL, NULL);

  const char* deflated = (const char*)outStream->GetBuffer();
  return newSVpvn(deflated, outStream->GetSize());
}


MODULE = Compress::Deflate7		PACKAGE = Compress::Deflate7		

void
_zlib7(sv, algo, pass, fb, cycles)
    SV* sv
    unsigned int algo
    unsigned int pass
    unsigned int fb
    unsigned int cycles
  PREINIT:
    STRLEN len;
    char* data;
  PPCODE:
    data = SvPVbyte(sv, len);
    mXPUSHs(internalZlib7(data, len, algo, pass, fb, cycles));

void
_deflate7(sv, algo, pass, fb, cycles)
    SV* sv
    unsigned int algo
    unsigned int pass
    unsigned int fb
    unsigned int cycles
  PREINIT:
    STRLEN len;
    char* data;
  PPCODE:
    data = SvPVbyte(sv, len);
    mXPUSHs(internalDeflate7(data, len, algo, pass, fb, cycles));



( run in 1.313 second using v1.01-cache-2.11-cpan-71847e10f99 )