summaryrefslogtreecommitdiff
path: root/pyqidx_build.py
diff options
context:
space:
mode:
Diffstat (limited to 'pyqidx_build.py')
-rw-r--r--pyqidx_build.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/pyqidx_build.py b/pyqidx_build.py
new file mode 100644
index 0000000..1bf8e58
--- /dev/null
+++ b/pyqidx_build.py
@@ -0,0 +1,69 @@
+from cffi import FFI
+ffibuilder = FFI()
+
+ffibuilder.cdef("""
+ // @abstract Structure representing an unique alignment and virtual file pointer
+ // @field tid chromosome ID
+ // @field pos 0-based leftmost coordinate
+ // @field vptr virtual pointer
+ typedef struct {
+ uint32_t tid;
+ uint32_t pos;
+ uint64_t vptr;
+ } aln_spec_t;
+
+ // @abstract Structure representing all alignments by queryname
+ // @field qname queryname (name for the given read)
+ // @field n_alns number of alignments
+ // @field alns array with alignments structures
+ typedef struct {
+ char * qname;
+ uint16_t n_alns;
+ aln_spec_t * alns;
+ } qidx_record_t;
+
+ typedef enum {
+ QIDX_OK = 0,
+ QIDX_ITER_DONE,
+ QIDX_NO_MEM,
+ QIDX_NO_BAM_HDR,
+ QIDX_BAM_READ_FAILURE,
+ QIDX_REC_ITER_FAILURE,
+ QIDX_NOT_SORTED,
+ QIDX_BUCKET_MAX_SIZE_EXCEEDED,
+ QIDX_MAP_FAIL,
+ QIDX_IO_FAIL,
+ QIDX_FAILED_TO_OPEN_BAMFILE,
+ QIDX_FAILED_TO_OPEN_INDEX_FILE,
+ QIDX_INVALID_VERSION,
+ QIDX_INVALID_MAGIC,
+ } qidx_err_t;
+
+ bool qidx_errno(qidx_err_t err);
+
+ char const * qidx_strerr(qidx_err_t err);
+
+ struct qidx_fp;
+ typedef struct qidx_fp qidx_fp_t;
+
+ qidx_err_t qidx_open(qidx_fp_t ** fp, int fd);
+ qidx_err_t qidx_create(qidx_fp_t ** fp, int fd, uint32_t _n_buckets,
+ uint32_t max_bucket_size);
+ qidx_err_t qidx_lookup_alnrec(qidx_fp_t * fp,
+ char const * qname, qidx_record_t ** rec);
+ void qidx_free_alnrec(qidx_record_t * rec);
+ qidx_err_t qidx_close(qidx_fp_t * fp);
+""")
+
+ffibuilder.set_source(
+ "pyqidx._qidx",
+"""
+ #include <qidx.h> // the C header of the library
+""",
+ libraries=['qidx'],
+ extra_link_args=['-Wl,-rpath=/usr/local/lib'],
+) # library name, for the linker
+
+
+if __name__ == "__main__":
+ ffibuilder.compile(verbose=True)