1 /*==========================================================================
2 SeqAn - The Library for Sequence Analysis
4 ============================================================================
7 This library is free software; you can redistribute it and/or
8 modify it under the terms of the GNU Lesser General Public
9 License as published by the Free Software Foundation; either
10 version 3 of the License, or (at your option) any later version.
12 This library is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15 Lesser General Public License for more details.
17 ============================================================================
18 $Id: file_format_raw.h,v 1.1 2008/08/25 16:20:03 langmead Exp $
19 ==========================================================================*/
21 #ifndef SEQAN_HEADER_FILE_RAW_H
22 #define SEQAN_HEADER_FILE_RAW_H
24 namespace SEQAN_NAMESPACE_MAIN
27 //////////////////////////////////////////////////////////////////////////////
29 //////////////////////////////////////////////////////////////////////////////
31 .Tag.File Format.tag.Raw:
32 The file contains data in a raw format.
33 ..remark:It is supposed that the file contains one single piece of data,
34 that is the file cannot store multiple records.
38 typedef Tag<TagRaw_> const Raw;
42 //////////////////////////////////////////////////////////////////////////////
44 //////////////////////////////////////////////////////////////////////////////
46 template <typename TFile, typename TData, typename TTag>
49 //____________________________________________________________________________
51 template <typename TFile, typename TData>
52 struct _Read_Raw<TFile, TData, True>
59 SEQAN_ASSERT(!_streamEOF(file))
62 typename Position<TFile>::Type begin_pos = _streamTellG(file);
63 typename Size<TData>::Type count = 0;
64 typename Value<TFile>::Type c = _streamGet(file);
66 while (!_streamEOF(file))
77 if (length(data) < count)
83 _streamSeekG(file, begin_pos);
85 typename Position<TData>::Type pos;
86 for (pos = 0; pos < count; )
89 assignValue(data, pos, c);
93 //____________________________________________________________________________
95 template <typename TSize>
102 SEQAN_ASSERT(!_streamEOF(file))
104 typename Size<TData>::Type limit = _limit;
107 typename Position<TFile>::Type begin_pos = _streamTellG(file);
108 typename Size<TData>::Type count = 0;
109 typename Value<TFile>::Type c = _streamGet(file);
111 while (!_streamEOF(file))
113 c = _streamGet(file);
115 if (count == limit) break;
123 if (length(data) < count)
125 count = length(data);
129 _streamSeekG(file, begin_pos);
131 typename Position<TData>::Type pos;
132 for (pos = 0; pos < count; )
134 c = _streamGet(file);
135 assignValue(data, pos, c);
141 //____________________________________________________________________________
143 template <typename TFile, typename TData>
144 struct _Read_Raw<TFile, TData, False>
153 if (!_streamEOF(file))
156 _ChunkCollector<TData> chunk_collector(data);
157 assign(chunk_collector, file);
158 append(data, chunk_collector);
162 //____________________________________________________________________________
164 template <typename TSize>
173 if (!_streamEOF(file))
176 _ChunkCollector<TData> chunk_collector(data);
177 assign(chunk_collector, file, limit);
178 append(data, chunk_collector, limit);
183 //////////////////////////////////////////////////////////////////////////////
186 template <typename TFile, typename TData>
193 _Read_Raw<TFile, TData, typename _IsTellSeekStream<TFile>::Type>::read_(file, data);
196 //____________________________________________________________________________
198 template <typename TFile, typename TData, typename TSize>
206 _Read_Raw<TFile, TData, typename _IsTellSeekStream<TFile>::Type>::read_(file, data, limit);
210 //////////////////////////////////////////////////////////////////////////////
212 //////////////////////////////////////////////////////////////////////////////
214 template <typename TFile, typename TString>
216 readID(TFile & /*file*/,
224 //////////////////////////////////////////////////////////////////////////////
226 //////////////////////////////////////////////////////////////////////////////
228 template <typename TFile, typename TMeta>
230 readMeta(TFile & file,
239 //////////////////////////////////////////////////////////////////////////////
241 //////////////////////////////////////////////////////////////////////////////
243 template <typename TFile>
249 SEQAN_ASSERT(!_streamEOF(file))
251 //??? TODO: set file to eof
256 //////////////////////////////////////////////////////////////////////////////
258 //////////////////////////////////////////////////////////////////////////////
261 template <typename TFile, typename TString, typename TData>
268 _streamWrite(file, data);
271 //____________________________________________________________________________
273 template <typename TFile, typename TData, typename TString>
281 _streamWrite(file, data);
284 //____________________________________________________________________________
286 template <typename TFile, typename TString, typename TData, typename TMeta>
295 _streamWrite(file, data);
298 //////////////////////////////////////////////////////////////////////////////
300 //////////////////////////////////////////////////////////////////////////////
303 template <typename TFile, typename TData>
308 read(file, data, Raw());
311 template <typename TFile, typename TData, typename TSize>
318 read(file, data, limit, Raw());
321 //____________________________________________________________________________
323 template <typename TFile, typename TData>
329 write(file, data, "", Raw());
331 template <typename TFile, typename TData>
337 write(file, data, "", Raw());
340 //////////////////////////////////////////////////////////////////////////////
341 } //namespace SEQAN_NAMESPACE_MAIN
343 //////////////////////////////////////////////////////////////////////////////
345 #endif //#ifndef SEQAN_HEADER_...