annotate SNV/SNVMix2_source/SNVMix2-v0.12.1-rc1/samtools-0.1.6/razf.h @ 7:351b3acadd17 default tip

Uploaded
author ryanmorin
date Tue, 18 Oct 2011 18:33:15 -0400
parents 74f5ea818cea
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
1 /*-
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
2 * RAZF : Random Access compressed(Z) File
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
3 * Version: 1.0
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
4 * Release Date: 2008-10-27
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
5 *
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
6 * Copyright 2008, Jue Ruan <ruanjue@gmail.com>, Heng Li <lh3@sanger.ac.uk>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
7 *
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
8 * All rights reserved.
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
9 *
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
10 * Redistribution and use in source and binary forms, with or without
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
11 * modification, are permitted provided that the following conditions
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
12 * are met:
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
13 * 1. Redistributions of source code must retain the above copyright
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
14 * notice, this list of conditions and the following disclaimer.
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
15 * 2. Redistributions in binary form must reproduce the above copyright
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
16 * notice, this list of conditions and the following disclaimer in the
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
17 * documentation and/or other materials provided with the distribution.
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
18 *
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
19 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
20 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
21 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
22 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
23 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
24 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
25 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
26 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
27 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
28 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
29 * SUCH DAMAGE.
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
30 */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
31
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
32
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
33 #ifndef __RAZF_RJ_H
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
34 #define __RAZF_RJ_H
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
35
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
36 #include <stdint.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
37 #include <stdio.h>
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
38 #include "zlib.h"
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
39
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
40 #if ZLIB_VERNUM < 0x1221
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
41 #define _RZ_READONLY
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
42 struct _gz_header_s;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
43 typedef struct _gz_header_s _gz_header;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
44 #define gz_header _gz_header
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
45 #endif
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
46
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
47 #define WINDOW_BITS 15
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
48
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
49 #ifndef RZ_BLOCK_SIZE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
50 #define RZ_BLOCK_SIZE (1<<WINDOW_BITS)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
51 #endif
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
52
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
53 #ifndef RZ_BUFFER_SIZE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
54 #define RZ_BUFFER_SIZE 4096
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
55 #endif
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
56
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
57 #ifndef RZ_COMPRESS_LEVEL
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
58 #define RZ_COMPRESS_LEVEL 6
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
59 #endif
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
60
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
61 #define RZ_BIN_SIZE ((1LLU << 32) / RZ_BLOCK_SIZE)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
62
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
63 typedef struct {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
64 uint32_t *cell_offsets; // i
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
65 int64_t *bin_offsets; // i / BIN_SIZE
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
66 int size;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
67 int cap;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
68 } ZBlockIndex;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
69 /* When storing index, output bytes in Big-Endian everywhere */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
70
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
71 #define FILE_TYPE_RZ 1
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
72 #define FILE_TYPE_PLAIN 2
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
73 #define FILE_TYPE_GZ 3
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
74
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
75 typedef struct RandomAccessZFile {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
76 char mode; /* 'w' : write mode; 'r' : read mode */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
77 int file_type;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
78 /* plain file or rz file, razf_read support plain file as input too, in this case, razf_read work as buffered fread */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
79 int filedes; /* the file descriptor */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
80 z_stream *stream;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
81 ZBlockIndex *index;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
82 int64_t in, out, end, src_end;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
83 /* in: n bytes total in; out: n bytes total out; */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
84 /* end: the end of all data blocks, while the start of index; src_end: the true end position in uncompressed file */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
85 int buf_flush; // buffer should be flush, suspend inflate util buffer is empty
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
86 int64_t block_pos, block_off, next_block_pos;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
87 /* block_pos: the start postiion of current block in compressed file */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
88 /* block_off: tell how many bytes have been read from current block */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
89 void *inbuf, *outbuf;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
90 int header_size;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
91 gz_header *header;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
92 /* header is used to transfer inflate_state->mode from HEAD to TYPE after call inflateReset */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
93 int buf_off, buf_len;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
94 int z_err, z_eof;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
95 int seekable;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
96 /* Indice where the source is seekable */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
97 int load_index;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
98 /* set has_index to 0 in mode 'w', then index will be discarded */
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
99 } RAZF;
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
100
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
101 #ifdef __cplusplus
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
102 extern "C" {
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
103 #endif
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
104
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
105 RAZF* razf_dopen(int data_fd, const char *mode);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
106 RAZF *razf_open(const char *fn, const char *mode);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
107 int razf_write(RAZF* rz, const void *data, int size);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
108 int razf_read(RAZF* rz, void *data, int size);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
109 int64_t razf_seek(RAZF* rz, int64_t pos, int where);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
110 void razf_close(RAZF* rz);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
111
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
112 #define razf_tell(rz) ((rz)->out)
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
113
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
114 RAZF* razf_open2(const char *filename, const char *mode);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
115 RAZF* razf_dopen2(int fd, const char *mode);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
116 uint64_t razf_tell2(RAZF *rz);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
117 int64_t razf_seek2(RAZF *rz, uint64_t voffset, int where);
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
118
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
119 #ifdef __cplusplus
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
120 }
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
121 #endif
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
122
74f5ea818cea Uploaded
ryanmorin
parents:
diff changeset
123 #endif