Changelog entry marking the package released.
[tabix.git] / perl / Tabix.pm
1 package Tabix;
2
3 use strict;
4 use warnings;
5 use Carp qw/croak/;
6
7 use TabixIterator;
8
9 require Exporter;
10
11 our @ISA = qw/Exporter/;
12 our @EXPORT = qw/tabix_open tabix_close tabix_read tabix_query tabix_getnames tabix_iter_free/;
13
14 our $VERSION = '0.2.0';
15
16 require XSLoader;
17 XSLoader::load('Tabix', $VERSION);
18
19 sub new {
20   my $invocant = shift;
21   my %args = @_;
22   $args{-data} || croak("-data argument required");
23   my $class = ref($invocant) || $invocant;
24   my $self = {};
25   bless($self, $class);
26   $self->open($args{-data}, $args{-index});
27   return $self;
28 }
29
30 sub open {
31   my ($self, $fn, $fnidx) = @_;
32   $self->close;
33   $self->{_fn} = $fn;
34   $self->{_fnidx} = $fnidx;
35   $self->{_} = $fnidx? tabix_open($fn, $fnidx) : tabix_open($fn);
36 }
37
38 sub close {
39   my $self = shift;
40   if ($self->{_}) {
41         tabix_close($self->{_});
42         delete($self->{_}); delete($self->{_fn}); delete($self->{_fnidx});
43   }
44 }
45
46 sub DESTROY {
47   my $self = shift;
48   $self->close;
49 }
50
51 sub query {
52   my $self = shift;
53   my $iter;
54   if (@_) {
55         $iter = tabix_query($self->{_}, @_);
56   } else {
57         $iter = tabix_query($self->{_});
58   }
59   my $i = TabixIterator->new;
60   $i->set($iter);
61   return $i;
62 }
63
64 sub read {
65   my $self = shift;
66   my $iter = shift;
67   return tabix_read($self->{_}, $iter->get);
68 }
69
70 sub getnames {
71   my $self = shift;
72   return tabix_getnames($self->{_});
73 }
74
75 1;
76 __END__