diff --git a/python/obitools3/format/fasta.pxd b/python/obitools3/format/fasta.pxd index b2d2c2d..e76e717 100644 --- a/python/obitools3/format/fasta.pxd +++ b/python/obitools3/format/fasta.pxd @@ -6,4 +6,4 @@ cdef class FastaFormat: cdef HeaderFormat headerFormater cdef size_t sequenceBufferLength - cdef cvarray sequenceBuffer + cdef char* sequenceBuffer diff --git a/python/obitools3/format/fasta.pyx b/python/obitools3/format/fasta.pyx index 2460e11..e88e6aa 100644 --- a/python/obitools3/format/fasta.pyx +++ b/python/obitools3/format/fasta.pyx @@ -1,4 +1,6 @@ cimport cython +from libc.stdlib cimport malloc, free, realloc +from libc.string cimport strncpy cdef class FastaFormat: @@ -7,32 +9,30 @@ cdef class FastaFormat: tags, printNAKeys) + + def __cinit(self): self.sequenceBufferLength=1000 - self.sequenceBuffer = cvarray(shape=(1000,), - itemsize=sizeof(char), - format="c", - mode="c", - allocate_buffer=True) + self.sequenceBuffer = malloc(self.sequenceBufferLength) + + def __dealloc__(self) + free(self.sequenceBuffer) + @cython.boundscheck(False) def __call__(self, dict data): cdef bytes brawseq = data['sequence'] + cdef char* crowseq = brawseq cdef size_t lseq = len(brawseq) cdef size_t needed_size = lseq + 1 - cdef char[:] seq - cdef char[:] fasta cdef size_t k=0 + needed_size += needed_size/ 50 if needed_size > self.sequenceBufferLength: self.sequenceBufferLength=needed_size - self.sequenceBuffer = cvarray(shape=(needed_size,), - itemsize=sizeof(char), - format="c", - mode="c", - allocate_buffer=True) + self.sequenceBuffer = realloc(self.sequenceBuffer, + self.sequenceBufferLength + ) - seq = brawseq - fasta = self.sequenceBuffer for i in range(0,lseq,60): if i+60 <= lseq: