diff options
author | flu0r1ne <flu0r1ne@flu0r1ne.net> | 2022-10-31 18:18:58 -0500 |
---|---|---|
committer | flu0r1ne <flu0r1ne@flu0r1ne.net> | 2022-10-31 18:18:58 -0500 |
commit | a9ce975c28d4bcfa2f8a777cfaea2baa40f1703f (patch) | |
tree | bfeae2c5202effa4b4d7ed01ccdae4b2eb5e436c /pyqidx_build.py | |
download | pyqidx-main.tar.xz pyqidx-main.zip |
Diffstat (limited to 'pyqidx_build.py')
-rw-r--r-- | pyqidx_build.py | 69 |
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) |