Imported Upstream version 0.2.0
[tabix.git] / perl / Tabix.xs
diff --git a/perl/Tabix.xs b/perl/Tabix.xs
new file mode 100644 (file)
index 0000000..50dabb1
--- /dev/null
@@ -0,0 +1,71 @@
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+
+#include <stdlib.h>
+#include "tabix.h"
+
+MODULE = Tabix PACKAGE = Tabix
+
+tabix_t*
+tabix_open(fn, fnidx=0)
+       char *fn
+       char *fnidx
+  CODE:
+       RETVAL = ti_open(fn, fnidx);
+  OUTPUT:
+       RETVAL
+
+void
+tabix_close(t)
+       tabix_t *t
+  CODE:
+       ti_close(t);
+
+ti_iter_t
+tabix_query(t, seq=0, beg=0, end=0x7fffffff)
+       tabix_t *t
+       const char *seq
+       int beg
+       int end
+  PREINIT:
+  CODE:
+       RETVAL = ti_query(t, seq, beg, end);
+  OUTPUT:
+       RETVAL
+
+SV*
+tabix_read(t, iter)
+       tabix_t *t
+       ti_iter_t iter
+  PREINIT:
+       const char *s;
+       int len;
+  CODE:
+       s = ti_read(t, iter, &len);
+       if (s == 0)
+          return XSRETURN_EMPTY;
+       RETVAL = newSVpv(s, len);
+  OUTPUT:
+       RETVAL
+
+void
+tabix_getnames(t)
+       tabix_t *t
+  PREINIT:
+       const char **names;
+       int i, n;
+  PPCODE:
+       ti_lazy_index_load(t);
+       names = ti_seqname(t->idx, &n);
+       for (i = 0; i < n; ++i)
+               XPUSHs(sv_2mortal(newSVpv(names[i], 0)));
+       free(names);
+
+MODULE = Tabix PACKAGE = TabixIterator
+
+void
+tabix_iter_free(iter)
+       ti_iter_t iter
+  CODE:
+       ti_iter_destroy(iter);