Go to the documentation of this file.
18 #ifndef __INPUTFILE_H__
19 #define __INPUTFILE_H__
38 bool myAttemptRecovery;
54 myAttemptRecovery =
false;
57 myCurrentBufferSize = 0;
59 myAllocatedBufferSize = DEFAULT_BUFFER_SIZE;
60 myFileBuffer =
new char[myAllocatedBufferSize];
73 InputFile(
const char * filename,
const char * mode,
83 inline void bufferReads(
unsigned int bufferSize = DEFAULT_BUFFER_SIZE)
86 if(bufferSize == myAllocatedBufferSize)
91 if(myFileBuffer != NULL)
93 delete[] myFileBuffer;
96 myCurrentBufferSize = 0;
103 myFileBuffer =
new char[bufferSize];
104 myAllocatedBufferSize = bufferSize;
106 if(myFileTypePtr != NULL)
110 myFileTypePtr->setBuffered(
false);
114 myFileTypePtr->setBuffered(
true);
124 if(myFileTypePtr != NULL)
126 myFileTypePtr->setBuffered(
false);
135 if (myFileTypePtr == NULL)
139 int result = myFileTypePtr->close();
140 delete myFileTypePtr;
141 myFileTypePtr = NULL;
153 inline int ifread(
void * buffer,
unsigned int size)
160 unsigned int availableBytes = myCurrentBufferSize - myBufferIndex;
164 if (size <= availableBytes)
167 memcpy(buffer, myFileBuffer+myBufferIndex, size);
169 myBufferIndex += size;
176 if (availableBytes > 0)
180 memcpy(buffer, myFileBuffer+myBufferIndex, availableBytes);
183 returnSize = availableBytes;
185 myBufferIndex += availableBytes;
187 unsigned int remainingSize = size - availableBytes;
191 if(remainingSize < myAllocatedBufferSize)
195 myCurrentBufferSize =
196 readFromFile(myFileBuffer, myAllocatedBufferSize);
199 if(myCurrentBufferSize <= 0)
208 returnSize = myCurrentBufferSize;
214 myCurrentBufferSize = 0;
221 int copySize = remainingSize;
222 if(copySize > myCurrentBufferSize)
227 copySize = myCurrentBufferSize;
231 memcpy((
char*)buffer+availableBytes,
232 myFileBuffer, copySize);
236 myBufferIndex = copySize;
238 returnSize += copySize;
245 int readSize = readFromFile((
char*)buffer + availableBytes,
249 myCurrentBufferSize = 0;
260 returnSize = readSize;
269 returnSize += readSize;
286 int readTilChar(
const std::string& stopChars, std::string& stringRef);
326 if (myBufferIndex >= myCurrentBufferSize)
329 myCurrentBufferSize = readFromFile(myFileBuffer, myAllocatedBufferSize);
335 if (myCurrentBufferSize == 0)
340 return(myFileBuffer[myBufferIndex++]);
350 char *buffer = (
char *) voidBuffer;
352 while( (ch=
ifgetc()) !=
'\n' && ch != EOF) {
357 while( (ch=
ifgetc()) && ch !=
'\n' && ch != EOF)
373 if (myFileTypePtr == NULL)
378 myCurrentBufferSize = 0;
380 myFileTypePtr->rewind();
389 if (myBufferIndex < myCurrentBufferSize)
396 if (myFileTypePtr == NULL)
402 return myFileTypePtr->eof();
411 inline unsigned int ifwrite(
const void * buffer,
unsigned int size)
413 if (myFileTypePtr == NULL)
418 return myFileTypePtr->write(buffer, size);
426 if ((myFileTypePtr != NULL) && myFileTypePtr->isOpen())
438 if (myFileTypePtr == NULL)
443 int64_t pos = myFileTypePtr->tell();
444 pos -= (myCurrentBufferSize - myBufferIndex);
457 inline bool ifseek(int64_t offset,
int origin)
459 if (myFileTypePtr == NULL)
467 myCurrentBufferSize = 0;
468 return myFileTypePtr->seek(offset, origin);
475 return(myFileName.c_str());
487 myAttemptRecovery = flag;
490 bool attemptRecoverySync(
bool (*checkSignature)(
void *data) ,
int length)
492 if(myFileTypePtr==NULL)
return false;
493 return myFileTypePtr->attemptRecoverySync(checkSignature, length);
498 bool openFile(
const char * filename,
const char * mode,
505 inline int readFromFile(
void * buffer,
unsigned int size)
508 if (myFileTypePtr == NULL)
512 return myFileTypePtr->read(buffer, size);
515 #ifdef __ZLIB_AVAILABLE__
521 void openFileUsingMode(
const char* filename,
const char* mode,
526 static const unsigned int DEFAULT_BUFFER_SIZE = 65536;
531 unsigned int myAllocatedBufferSize;
544 int myCurrentBufferSize;
546 std::string myFileName;
600 inline unsigned int ifread(
IFILE file,
void * buffer,
unsigned int size)
607 return(file->
ifread(buffer, size));
661 return(file->
ifeof());
669 inline unsigned int ifwrite(
IFILE file,
const void * buffer,
unsigned int size)
676 return(file->
ifwrite(buffer, size));
708 return (file->
ifseek(offset, origin));
729 while ((ch = stream->
ifgetc())!=EOF && (ch !=
'\n')) str.push_back(ch);
738 unsigned int numExpected = str.length();
739 unsigned int numWritten =
740 stream.
ifwrite(str.c_str(), numExpected);
741 if(numExpected != numWritten)
743 std::cerr <<
"Failed to stream to IFILE, expected "
744 << numExpected <<
" but only wrote "
745 << numWritten << std::endl;
755 unsigned int numExpected = strlen(str);
756 unsigned int numWritten =
757 stream.
ifwrite(str, numExpected);
758 if(numExpected != numWritten)
760 std::cerr <<
"Failed to stream to IFILE, expected "
761 << numExpected <<
" but only wrote "
762 << numWritten << std::endl;
788 unsigned int numWritten =
792 std::cerr <<
"Failed to stream to IFILE, expected 1, but only wrote "
793 << numWritten << std::endl;