NVBIO
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
fastq.h
Go to the documentation of this file.
1 /*
2  * nvbio
3  * Copyright (c) 2011-2014, NVIDIA CORPORATION. All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the NVIDIA CORPORATION nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
17  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL NVIDIA CORPORATION BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 #pragma once
29 
30 #include <nvbio/basic/types.h>
31 #include <nvbio/basic/console.h>
32 #include <vector>
33 #include <stdio.h>
34 #include <stdlib.h>
35 #include <ctype.h>
36 
37 namespace nvbio {
38 
39 #define FASTQ_EOF 255u
40 
59 
64 
67 
72 {
75  FASTQ_gzfile(const uint32 buffer_size = 64536u);
76 
79  FASTQ_gzfile(const char* filename, const uint32 buffer_size = 64536u);
80 
83  ~FASTQ_gzfile();
84 
87  void open(const char* filename);
88 
91  bool valid() const;
92 
95  uint8 get();
96 
99  uint32 read(uint8* buffer, const uint32 n);
100 
101  struct Impl;
102 
103 private:
104  Impl* m_impl;
105  std::vector<uint8> m_buffer;
106  uint32 m_buffer_size;
107  uint32 m_buffer_pos;
108 };
109 
114 {
117  FASTQ_file(const uint32 buffer_size = 64536u);
118 
121  FASTQ_file(const char* filename, const uint32 buffer_size = 64536u);
122 
125  void open(const char* filename);
126 
129  ~FASTQ_file();
130 
133  bool valid() const { return m_file != NULL; }
134 
137  uint8 get();
138 
139 private:
140  FILE* m_file;
141  std::vector<uint8> m_buffer;
142  uint32 m_buffer_size;
143  uint32 m_buffer_pos;
144 };
145 
162 template <typename FASTQ_stream>
164 {
167  FASTQ_reader(FASTQ_stream& stream);
168 
172 
188  template <typename Writer>
189  uint32 read(const uint32 n_reads, Writer& writer);
190 
193  uint8 get() { return m_stream->get(); };
194 
197  void error_string(char* error);
198 
199 private:
200  FASTQ_stream* m_stream;
201 
202  std::vector<char> m_name;
203  std::vector<uint8> m_read_bp;
204  std::vector<uint8> m_read_q;
205 
206  uint32 m_error;
207  char m_error_char;
208  uint32 m_line;
209 };
210 
215 {
218  FASTQ_buffer(const uint32 buffer_size, const char* buffer) :
219  m_buffer( buffer ),
220  m_buffer_size( buffer_size ),
221  m_buffer_pos( 0 ) {}
222 
225  uint8 get()
226  {
228  };
229 
230  const char* m_buffer;
233 };
234 
236 
237 } // namespace nvbio
238 
239 #include <nvbio/fastq/fastq_inl.h>