]> iEval git - io-compress-brotli.git/blobdiff - Brotli.xs
Fix POD error
[io-compress-brotli.git] / Brotli.xs
index 74e6b1e1d1111781198b71ce67365b68ba3ff25a..5b7d008594a958e07e8a12f5be841a9655bd52d8 100644 (file)
--- a/Brotli.xs
+++ b/Brotli.xs
@@ -157,139 +157,80 @@ create(class)
   OUTPUT:
     RETVAL
 
-SV*
-window(self, window)
+bool BrotliEncoderSetParameter(self, value)
     IO::Compress::Brotli self
-    U32 window
-  CODE:
-    if( window < kBrotliMinWindowBits || window > kBrotliMaxWindowBits ) {
-        croak("Invalid window value");
-    }
-    if( BrotliEncoderSetParameter(self->encoder, BROTLI_PARAM_LGWIN, window) )
-        RETVAL = newSVuv(1);
-    else
-        RETVAL = newSVuv(0);
-  OUTPUT:
-    RETVAL
-
-SV*
-quality(self, quality)
-    IO::Compress::Brotli self
-    U32 quality
-  CODE:
-    if( quality < BROTLI_MIN_QUALITY || quality > BROTLI_MAX_QUALITY ) {
-        croak("Invalid quality value");
+    U32 value
+  ALIAS:
+    window  = 1
+    quality = 2
+    _mode   = 3
+  PREINIT:
+    BrotliEncoderParameter param;
+  INIT:
+    switch(ix){
+    case 0:
+        croak("BrotliEncoderSetParameter may not be called directly");
+        break;
+    case 1:
+        if( value < kBrotliMinWindowBits || value > kBrotliMaxWindowBits ) {
+            croak("Invalid window value");
+        }
+        param = BROTLI_PARAM_LGWIN;
+        break;
+    case 2:
+        if( value < BROTLI_MIN_QUALITY || value > BROTLI_MAX_QUALITY ) {
+            croak("Invalid quality value");
+        }
+        param = BROTLI_PARAM_QUALITY;
+        break;
+    case 3:
+        /* Validation done on Perl side */
+        param = BROTLI_PARAM_MODE;
+        break;
+    default:
+        croak("Impossible ix in BrotliEncoderSetParameter");
+        break;
     }
-    if( BrotliEncoderSetParameter(self->encoder, BROTLI_PARAM_QUALITY, quality) )
-        RETVAL = newSVuv(1);
-    else
-        RETVAL = newSVuv(0);
-  OUTPUT:
-    RETVAL
-
-SV*
-_mode(self, mode)
-    IO::Compress::Brotli self
-    U32 mode
-  CODE:
-    if( BrotliEncoderSetParameter(self->encoder, BROTLI_PARAM_MODE, mode) )
-        RETVAL = newSVuv(1);
-    else
-        RETVAL = newSVuv(0);
-  OUTPUT:
-    RETVAL
-
-SV*
-compress(self, in)
-    IO::Compress::Brotli self
-    SV* in
-  CODE:
-    ENTER;
-    SAVETMPS;
-
-    PUSHMARK(SP);
-    XPUSHs(ST(0));
-    XPUSHs(in);
-    XPUSHs(newSVuv(BROTLI_OPERATION_PROCESS));
-    PUTBACK;
-
-    call_method("_compress", G_SCALAR);
-
-    SPAGAIN;
-
-    RETVAL = POPs;
-    SvREFCNT_inc(RETVAL);
-
-    PUTBACK;
-    FREETMPS;
-    LEAVE;
-  OUTPUT:
-    RETVAL
-
-SV*
-flush(self)
-    IO::Compress::Brotli self
-  CODE:
-    ENTER;
-    SAVETMPS;
-
-    PUSHMARK(SP);
-    XPUSHs(ST(0));
-    XPUSHs(newSVpv("", 0));
-    XPUSHs(newSVuv(BROTLI_OPERATION_FLUSH));
-    PUTBACK;
-
-    call_method("_compress", G_SCALAR);
-
-    SPAGAIN;
-
-    RETVAL = POPs;
-    SvREFCNT_inc(RETVAL);
-
-    PUTBACK;
-    FREETMPS;
-    LEAVE;
-  OUTPUT:
-    RETVAL
+  C_ARGS:
+    self->encoder, param, value
 
 SV*
-finish(self)
-    IO::Compress::Brotli self
-  CODE:
-    ENTER;
-    SAVETMPS;
-
-    PUSHMARK(SP);
-    XPUSHs(ST(0));
-    XPUSHs(newSVpv("", 0));
-    XPUSHs(newSVuv(BROTLI_OPERATION_FINISH));
-    PUTBACK;
-
-    call_method("_compress", G_SCALAR);
-
-    SPAGAIN;
-
-    RETVAL = POPs;
-    SvREFCNT_inc(RETVAL);
-
-    PUTBACK;
-    FREETMPS;
-    LEAVE;
-  OUTPUT:
-    RETVAL
-
-SV*
-_compress(self, in, op)
+_compress(self, in = &PL_sv_undef)
     IO::Compress::Brotli self
     SV* in
-    U8 op
+  ALIAS:
+    compress = 1
+    flush = 2
+    finish = 3
   PREINIT:
     uint8_t *next_in, *next_out, *buffer;
     size_t available_in, available_out;
     BROTLI_BOOL result;
+    BrotliEncoderOperation op;
   CODE:
-    next_in = (uint8_t*) SvPV(in, available_in);
+    switch(ix) {
+    case 0:
+        croak("_compress may not be called directly");
+        break;
+    case 1:
+        op = BROTLI_OPERATION_PROCESS;
+        break;
+    case 2:
+        op = BROTLI_OPERATION_FLUSH;
+        break;
+    case 3:
+        op = BROTLI_OPERATION_FINISH;
+        break;
+    default:
+        croak("Impossible ix in _compress");
+        break;
+    }
+
     Newx(buffer, BUFFER_SIZE, uint8_t);
+    if(in == &PL_sv_undef)
+        next_in = (uint8_t*) buffer, available_in = 0;
+    else
+        next_in = (uint8_t*) SvPV(in, available_in);
     RETVAL = newSVpv("", 0);
     while(1) {
         next_out = buffer;
@@ -324,6 +265,7 @@ DESTROY(self)
     IO::Compress::Brotli self
   CODE:
     BrotliEncoderDestroyInstance(self->encoder);
+    Safefree(self);
 
 void
 set_dictionary(self, dict)
This page took 0.024713 seconds and 4 git commands to generate.