19#include "StringBasics.h"
20#include "GzipHeader.h"
21#include "BgzfFileType.h"
22#include "BgzfFileTypeRecovery.h"
23#include "GzipFileType.h"
24#include "UncompressedFileType.h"
32 myAttemptRecovery =
false;
35 myCurrentBufferSize = 0;
36 myAllocatedBufferSize = DEFAULT_BUFFER_SIZE;
37 myFileBuffer =
new char[myAllocatedBufferSize];
40 openFile(filename, mode, compressionMode);
47 size_t pos = std::string::npos;
49 while(pos == std::string::npos)
60 pos = stopChars.find(charRead);
62 if(pos == std::string::npos)
66 stringRef += charRead;
76 size_t pos = std::string::npos;
78 while(pos == std::string::npos)
89 pos = stopChars.find(charRead);
99 while((charRead != EOF) && (charRead !=
'\n'))
157#ifdef __ZLIB_AVAILABLE__
161bool InputFile::openFile(
const char * filename,
const char * mode,
170 if(myAttemptRecovery) {
174 if (mode[0] ==
'w' || mode[0] ==
'W')
176 openFileUsingMode(filename, mode, compressionMode);
181 if((strcmp(filename,
"-") == 0) || (strcmp(filename,
"-.gz") == 0))
185 openFileUsingMode(filename, mode, compressionMode);
199 if (mode[0] ==
'r' || mode[0] ==
'R')
202 if (myFileTypePtr != NULL)
204 delete myFileTypePtr;
205 myFileTypePtr = NULL;
212 openFileUsingMode(filename, mode, compressionMode);
221 bool isGzip = gzipHeader.readHeader(file);
231 if (gzipHeader.isBgzfFile())
235 if(myAttemptRecovery) {
237 myFileTypePtr =
new BgzfFileTypeRecovery(filename, mode);
240 myFileTypePtr =
new BgzfFileType(filename, mode);
246 myFileTypePtr =
new GzipFileType(filename, mode);
258 if(myFileTypePtr == NULL)
262 if (!myFileTypePtr->isOpen())
265 delete myFileTypePtr;
266 myFileTypePtr = NULL;
270 if(myAllocatedBufferSize == 1)
272 myFileTypePtr->setBuffered(
false);
276 myFileTypePtr->setBuffered(
true);
278 myFileName = filename;
285void InputFile::openFileUsingMode(
const char * filename,
const char * mode,
286 ifileCompression compressionMode)
288 switch (compressionMode)
292 myFileTypePtr =
new GzipFileType(filename, mode);
299 if(myAttemptRecovery && ((mode[0] ==
'r') || (mode[0] ==
'R')))
302 myFileTypePtr =
new BgzfFileTypeRecovery(filename, mode);
306 myFileTypePtr =
new BgzfFileType(filename, mode);
317 while (filename[lastchar] != 0) lastchar++;
318 if ((lastchar >= 3 &&
319 filename[lastchar - 3] ==
'.' &&
320 filename[lastchar - 2] ==
'g' &&
321 filename[lastchar - 1] ==
'z'))
324 myFileTypePtr =
new GzipFileType(filename, mode);
334 if(myFileTypePtr == NULL)
338 if(myAllocatedBufferSize == 1)
340 myFileTypePtr->setBuffered(
false);
344 myFileTypePtr->setBuffered(
true);
353bool InputFile::openFile(
const char * filename,
const char * mode,
359 if(myFileTypePtr == NULL)
363 if (!myFileTypePtr->isOpen())
366 delete myFileTypePtr;
367 myFileTypePtr = NULL;
370 if(myAllocatedBufferSize == 1)
372 myFileTypePtr->setBuffered(
false);
376 myFileTypePtr->setBuffered(
true);
378 myFileName = filename;
387 delete myFileTypePtr;
388 myFileTypePtr = NULL;
390 if(myFileBuffer != NULL)
392 delete[] myFileBuffer;
398int ifprintf(
IFILE output,
const char * format, ...)
403 va_start(ap, format);
405 buffer.vprintf(format, ap);
409 return ::ifwrite(output, (
const char *) buffer, buffer.Length());