From a9ce975c28d4bcfa2f8a777cfaea2baa40f1703f Mon Sep 17 00:00:00 2001 From: flu0r1ne Date: Mon, 31 Oct 2022 18:18:58 -0500 Subject: Add inital wrapper --- pyqidx_build.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 pyqidx_build.py (limited to 'pyqidx_build.py') 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 // 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) -- cgit v1.2.3