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