Changelog entry marking the package released.
[tabix.git] / perl / Tabix.xs
1 #include "EXTERN.h"
2 #include "perl.h"
3 #include "XSUB.h"
4
5 #include <stdlib.h>
6 #include "tabix.h"
7
8 MODULE = Tabix PACKAGE = Tabix
9
10 tabix_t*
11 tabix_open(fn, fnidx=0)
12         char *fn
13         char *fnidx
14   CODE:
15         RETVAL = ti_open(fn, fnidx);
16   OUTPUT:
17         RETVAL
18
19 void
20 tabix_close(t)
21         tabix_t *t
22   CODE:
23         ti_close(t);
24
25 ti_iter_t
26 tabix_query(t, seq=0, beg=0, end=0x7fffffff)
27         tabix_t *t
28         const char *seq
29         int beg
30         int end
31   PREINIT:
32   CODE:
33         RETVAL = ti_query(t, seq, beg, end);
34   OUTPUT:
35         RETVAL
36
37 SV*
38 tabix_read(t, iter)
39         tabix_t *t
40         ti_iter_t iter
41   PREINIT:
42         const char *s;
43         int len;
44   CODE:
45         s = ti_read(t, iter, &len);
46         if (s == 0)
47            return XSRETURN_EMPTY;
48         RETVAL = newSVpv(s, len);
49   OUTPUT:
50         RETVAL
51
52 void
53 tabix_getnames(t)
54         tabix_t *t
55   PREINIT:
56         const char **names;
57         int i, n;
58   PPCODE:
59         ti_lazy_index_load(t);
60         names = ti_seqname(t->idx, &n);
61         for (i = 0; i < n; ++i)
62                 XPUSHs(sv_2mortal(newSVpv(names[i], 0)));
63         free(names);
64
65 MODULE = Tabix PACKAGE = TabixIterator
66
67 void
68 tabix_iter_free(iter)
69         ti_iter_t iter
70   CODE:
71         ti_iter_destroy(iter);