Gzip-RandomAccess

 view release on metacpan or  search on metacpan

RandomAccess.xs  view on Meta::CPAN

		if (!zran) {
			croak("could not open %s for reading", SvPVX(file));
			XSRETURN_UNDEF;
		}
		self = malloc(sizeof(*self));
		if (self == NULL) {
			free(zran);
			croak("out of memory");
			XSRETURN_UNDEF;
		}
		self->zran = zran;
		self->index_span = index_span;
		self->cleanup = cleanup;
		RETVAL = self;
	OUTPUT:
		RETVAL

char *
file(self)
	Gzip::RandomAccess	self
	CODE:
		RETVAL = self->zran->data.filename;
	OUTPUT:
		RETVAL

char *
index_file(self)
	Gzip::RandomAccess	self
	CODE:
		RETVAL = self->zran->index.filename;
	OUTPUT:
		RETVAL

Off_t
index_span(self)
	Gzip::RandomAccess	self
	CODE:
		RETVAL = self->index_span;
	OUTPUT:
		RETVAL

bool
cleanup(self)
	Gzip::RandomAccess	self
	CODE:
		RETVAL = self->cleanup;
	OUTPUT:
		RETVAL

bool
index_available(self)
	Gzip::RandomAccess	self
	CODE:
		RETVAL = zran_index_available(self->zran);
	OUTPUT:
		RETVAL

void
build_index(self)
	Gzip::RandomAccess	self
	PPCODE:
		zran_build_index(self->zran, self->index_span, NULL);

SV *
extract(self, offset, length)
	Gzip::RandomAccess	self
	Off_t	offset
	int	length
	CODE:
		char *buffer = (char *)malloc(length);
		int extracted = zran_extract(self->zran, offset, buffer, length);
		if (extracted < 0) {
			int err = extracted;
			croak("extract: failed (%s)", Z_ERRSTR(err));
		}
        else {
			RETVAL = newSVpvn(buffer, extracted);
			free(buffer);
		}
	OUTPUT:
		RETVAL

Off_t
uncompressed_size(self)
	Gzip::RandomAccess	self
	CODE:
		RETVAL = zran_uncompressed_size(self->zran);
		if (RETVAL == -1) {
			croak("uncompressed_size: unable to read index file");
			XSRETURN_UNDEF;
		}

	OUTPUT:
		RETVAL

void
_free(self)
	Gzip::RandomAccess	self
	PPCODE:
		zran_cleanup(self->zran);
		free(self);



( run in 0.763 second using v1.01-cache-2.11-cpan-5511b514fd6 )