biohazard-2.1: bioinformatics support library
Safe HaskellNone



Buffer builder to assemble Bgzf blocks. The idea is to serialize stuff (BAM and BCF) into a buffer, then bgzf chunks from the buffer. We use a large buffer, and we always make sure there is plenty of space in it (to avoid redundant checks).



bgunzip :: MonadIO m => ByteStream m r -> ByteStream m r Source #

Decompresses a bgzip stream. Individual chunks are decompressed in parallel. Leftovers are discarded (some compressed HETFA files appear to have junk at the end).

data BB Source #

We manage a large buffer (multiple megabytes), of which we fill an initial portion. We remember the size, the used part, and two marks where we later fill in sizes for the length prefixed BAM or BCF records. We move the buffer down when we yield a piece downstream, and when we run out of space, we simply move to a new buffer. Garbage collection should take care of the rest. Unused mark must be set to (maxBound::Int) so it doesn't interfere with flushing.




newBuffer :: Int -> IO BB Source #

Creates a buffer.

expandBuffer :: Int -> BB -> IO BB Source #

Creates a new buffer, copying the active content from an old one, with higher capacity. The size of the new buffer is twice the free space in the old buffer, but at least minsz.

encodeBgzf :: MonadIO m => Int -> Stream (Of (Endo BgzfTokens)) m b -> ByteStream m b Source #

Expand a chain of tokens into a buffer, sending finished pieces downstream as soon as possible.