X-Git-Url: http://woldlab.caltech.edu/gitweb/?p=pysam.git;a=blobdiff_plain;f=pysam%2Fctabix.pxd;fp=pysam%2Fctabix.pxd;h=ef735b64f9230f8851b1ab147a77fcad2835ce1b;hp=0000000000000000000000000000000000000000;hb=6a7c3f175b210cc16d09a5e8e4c1d47333dbe1c6;hpb=aa8ecff068edbb09a03bd874fce716e93e22e53c diff --git a/pysam/ctabix.pxd b/pysam/ctabix.pxd new file mode 100644 index 0000000..ef735b6 --- /dev/null +++ b/pysam/ctabix.pxd @@ -0,0 +1,171 @@ + +cdef extern from "string.h": + ctypedef int size_t + void *memcpy(void *dst,void *src,size_t len) + void *memmove(void *dst,void *src,size_t len) + void *memset(void *b,int c,size_t len) + char *strtok_r(char *str, char *delim, char **saveptr) + char *strncpy(char *dest, char *src, size_t n) + void *memchr(void *s, int c, size_t n) + +cdef extern from "stdlib.h": + void free(void *) + void *malloc(size_t) + void *calloc(size_t,size_t) + void *realloc(void *,size_t) + void qsort(void *base, size_t nmemb, size_t size, + int (*compar)(void *,void *)) + int c_abs "abs" (int) + int atoi( char *nptr) + long atol( char *nptr) + double atof( char *nptr) + +cdef extern from "stdio.h": + ctypedef struct FILE: + pass + FILE *fopen(char *,char *) + FILE *freopen(char *path, char *mode, FILE *stream) + int fileno(FILE *stream) + int dup2(int oldfd, int newfd) + int fflush(FILE *stream) + + FILE * stderr + FILE * stdout + int fclose(FILE *) + int sscanf(char *str,char *fmt,...) + int printf(char *str,char *fmt,...) + int sprintf(char *str,char *fmt,...) + int fprintf(FILE *ifile,char *fmt,...) + char *fgets(char *str,int size,FILE *ifile) + +cdef extern from "ctype.h": + int toupper(int c) + int tolower(int c) + +cdef extern from "sys/types.h": + pass + +cdef extern from "sys/stat.h": + pass + +cdef extern from "fcntl.h": + int open(char *pathname, int flags) + +cdef extern from "unistd.h": + ctypedef int ssize_t + char *ttyname(int fd) + int isatty(int fd) + ssize_t read(int fd, void *buf, size_t count) + +cdef extern from "string.h": + int strcmp(char *s1, char *s2) + int strncmp(char *s1,char *s2,size_t len) + char *strcpy(char *dest,char *src) + char *strncpy(char *dest,char *src, size_t len) + char *strdup(char *) + char *strcat(char *,char *) + size_t strlen(char *s) + int memcmp( void * s1, void *s2, size_t len ) + +cdef extern from "stdint.h": + ctypedef int int64_t + ctypedef int int32_t + ctypedef int uint32_t + ctypedef int uint8_t + ctypedef int uint64_t + +cdef extern from "Python.h": + ctypedef struct FILE + FILE* PyFile_AsFile(object) + char *fgets(char *str, int size, FILE *ifile) + int feof(FILE *stream) + size_t strlen(char *s) + size_t getline(char **lineptr, size_t *n, FILE *stream) + char *strstr(char *, char *) + char *strchr(char *string, int c) + int fileno(FILE *stream) + +cdef extern from "bgzf.h": + + ctypedef struct BGZF: + pass + + int64_t bgzf_seek(BGZF* fp, int64_t pos, int where) + + BGZF * bgzf_open(char * path, char * mode) + + int bgzf_write(BGZF * fp, void* data, int length) + + int bgzf_close(BGZF* fp) + +# tabix support +cdef extern from "tabix.h": + + ctypedef struct ti_index_t: + pass + + ctypedef struct tabix_t: + BGZF *fp + ti_index_t *idx + char *fn + char *fnidx + + ctypedef struct ti_iter_t: + pass + + ctypedef struct ti_conf_t: + int32_t preset + int32_t sc, bc, ec + int32_t meta_char, line_skip + + tabix_t *ti_open(char *fn, char *fnidx) + + int ti_lazy_index_load(tabix_t *t) + + void ti_close(tabix_t *t) + + ti_iter_t ti_query(tabix_t *t, char *name, int beg, int end) + ti_iter_t ti_queryi(tabix_t *t, int tid, int beg, int end) + ti_iter_t ti_querys(tabix_t *t, char *reg) + char * ti_read(tabix_t *t, ti_iter_t iter, int *len) + + # Get the list of sequence names. Each "char*" pointer points to a + # internal member of the index, so DO NOT modify the returned + # pointer; otherwise the index will be corrupted. The returned + # pointer should be freed by a single free() call by the routine + # calling this function. The number of sequences is returned at *n + char **ti_seqname(ti_index_t *idx, int *n) + + + # Destroy the iterator + void ti_iter_destroy(ti_iter_t iter) + + # Build the index for file . File .tbi will be generated + # and overwrite the file of the same name. Return -1 on failure. */ + int ti_index_build(char *fn, ti_conf_t *conf) + + #/* Load the index from file .tbi. If is a URL and the index + # * file is not in the working directory, .tbi will be + # * downloaded. Return NULL on failure. */ + ti_index_t *ti_index_load( char *fn) + + ti_index_t *ti_index_load_local(char *fnidx) + + #/* Destroy the index */ + void ti_index_destroy(ti_index_t *idx) + + #/* Parse a region like: chr2, chr2:100, chr2:100-200. Return -1 on failure. */ + int ti_parse_region( ti_index_t *idx, char *str, int *tid, int *begin, int *end) + + int ti_get_tid( ti_index_t *idx, char *name) + + # /* Get the iterator pointing to the first record at the current file + # * position. If the file is just openned, the iterator points to the + # * first record in the file. */ + ti_iter_t ti_iter_first() + + # /* Get the iterator pointing to the first record in region tid:beg-end */ + ti_iter_t ti_iter_query( ti_index_t *idx, int tid, int beg, int end) + + # /* Get the data line pointed by the iterator and iterate to the next record. */ + # char *ti_iter_read(BGZF *fp, ti_iter_t iter, int *len)