package SPVM::Resource::Zlib;

our $VERSION = '0.01';

1;

=head1 NAME

SPVM::Resource::Zlib - zlib Resource

=head1 DESCRIPTION

C<SPVM::Resource::Zlib> is the document of the L<resource|SPVM::Document::Resource> of the L<zlib|https://zlib.net/"> library.

=head1 SYNOPSYS

B<MyZlib.pl>

  use strict;
  use warnings;
  use FindBin;

  use lib "$FindBin::Bin/lib";

  use SPVM 'MyZlib';

  my $gz_file = "$FindBin::Bin/minitest.txt.gz";

  SPVM::MyZlib->test_gzopen_gzread($gz_file);

B<lib/SPVM/MyZlib.spvm>

  class MyZlib {
    native static method test_gzopen_gzread : void ($file : string);
  }

B<lib/SPVM/MyZlib.config>

  use strict;
  use warnings;

  my $config = SPVM::Builder::Config->new_gnu99(file => __FILE__);

  $config->use_resource('Resource::Zlib::V1_2_11');

  $config;

B<lib/SPVM/MyZlib.c>

  #include "spvm_native.h"

  #include <zlib.h>

  int32_t SPVM__MyZlib__test_gzopen_gzread(SPVM_ENV* env, SPVM_VALUE* stack) {
    (void)env;
    
    void* sp_file = stack[0].oval;
    
    const char* file = env->get_chars(env, sp_file);
    
    z_stream z;

    gzFile gz_fh = gzopen(file, "rb");
    
    if (gz_fh == NULL){
      return env->die(env, "Can't open file \"%s\"\n", file);
    }
    
    char buffer[256] = {0};
    int32_t cnt;
    while((cnt = gzread(gz_fh, buffer, sizeof(buffer))) > 0){

    }

    printf("%s", buffer);
    
    return 0;
  }

=head1 RESOURCES

The list of C<zlib> resources.

=over 2

* L<SPVM::Resource::Zlib::V1_2_11> - zlib v1.2.11

=back