Loading...
Searching...
No Matches
GlfFile Class Reference

This class allows a user to easily read/write a GLF file. More...

`#include <GlfFile.h>`

Inheritance diagram for GlfFile:
[legend]

## Public Types

enum | OpenType { READ , WRITE }
| Enum for indicating whether to open the file for read or write. More...

## Public Member Functions

| GlfFile ()
| Default Constructor.
| GlfFile (const char *filename, OpenType mode=READ)
| Constructor that opens the specified file based on the specified mode (READ/WRITE).
virtual | ~GlfFile ()
| Closes the file if there is one open, adding an end marker record if there is a previous section and one has not already been written.
bool | openForRead (const char *filename)
| Open a glf file for reading with the specified filename.
bool | openForRead (const char *filename, GlfHeader &header)
| Open a glf file for reading with the specified filename and read the header into the specified header.
bool | openForWrite (const char *filename, bool compressed=true)
| Open a glf file for writing with the specified filename.
void | close ()
| Close the file if there is one open, adding an end marker record if there is a previous section and one has not already been written.
bool | isEOF ()
| Returns whether or not the end of the file has been reached.
bool | readHeader (GlfHeader &header)
| Reads the header section from the file and stores it in the passed in header.
bool | writeHeader (GlfHeader &header)
| Writes the specified header into the file.
bool | getNextRefSection (GlfRefSection &refSection)
| Gets the next reference section from the file & stores it in the passed in section, consuming records until a new section is found.
bool | writeRefSection (const GlfRefSection &refSection)
| Write the reference section to the file, adding an end marker record if there is a previous section and one has not already been written.
bool | getNextRecord (GlfRecord &record)
| Gets the nextrecord from the file & stores it in the passed in record.
bool | writeRecord (const GlfRecord &record)
| Writes the specified record into the file.
uint32_t | getCurrentRecordCount ()
| Return the number of records that have been read/written so far.
GlfStatus::Status | getFailure ()
| Get the Status of the last call that sets status.
GlfStatus::Status | getStatus ()
| Get the Status of the last call that sets status.
const char * | getStatusMessage ()
| Get the Status of the last call that sets status.

## Detailed Description

This class allows a user to easily read/write a GLF file.

Definition at line 28 of file GlfFile.h.

## Member Enumeration Documentation

## OpenType

enum GlfFile::OpenType

Enum for indicating whether to open the file for read or write.

Enumerator
READ | open for reading.
WRITE | open for writing.

Definition at line 32 of file GlfFile.h.

{
READ, ///< open for reading.
WRITE ///< open for writing.
};
GlfFile::READ
@ READ
open for reading.
Definition GlfFile.h:34
GlfFile::WRITE
@ WRITE
open for writing.
Definition GlfFile.h:35

## Constructor & Destructor Documentation

## GlfFile() [1/2]

GlfFile::GlfFile | ( |  | ) |

Default Constructor.

Definition at line 23 of file GlfFile.cpp.

: myFilePtr(NULL),
myEndMarker()
{
resetFile();
}

## GlfFile() [2/2]

GlfFile::GlfFile | ( | const char * | filename,
|  | OpenType | mode = `READ`
| ) |  |

Constructor that opens the specified file based on the specified mode (READ/WRITE).

Default is READ.

Parameters

  filename | name of the file to open.
  mode | mode to use for opening the file (defaults to READ).

Definition at line 33 of file GlfFile.cpp.

: myFilePtr(NULL),
myEndMarker()
{
resetFile();
bool openStatus = true;
if(mode == READ)
{
// open the file for read.
openStatus = openForRead(filename);
}
else
{
// open the file for write.
openStatus = openForWrite(filename);
}
if(!openStatus)
{
// Failed to open the file - print error and abort.
fprintf(stderr, "%s\n", getStatusMessage());
std::cerr << "FAILURE - EXITING!!!" << std::endl;
exit(-1);
}
}
GlfFile::getStatusMessage
const char * getStatusMessage()
Get the Status of the last call that sets status.
Definition GlfFile.h:135
GlfFile::openForWrite
bool openForWrite(const char *filename, bool compressed=true)
Open a glf file for writing with the specified filename.
Definition GlfFile.cpp:109
GlfFile::openForRead
bool openForRead(const char *filename)
Open a glf file for reading with the specified filename.
Definition GlfFile.cpp:66

References getStatusMessage(), openForRead(), openForWrite(), and READ.

## ~GlfFile()

GlfFile::~GlfFile | ( |  | ) |

virtual

Closes the file if there is one open, adding an end marker record if there is a previous section and one has not already been written.

Definition at line 59 of file GlfFile.cpp.

{
resetFile();
}

## Member Function Documentation

## close()

void GlfFile::close | ( |  | ) |

Close the file if there is one open, adding an end marker record if there is a previous section and one has not already been written.

Definition at line 142 of file GlfFile.cpp.

{
// Resetting the file will close it if it is open, and
// will reset all other variables.
resetFile();
}

## getCurrentRecordCount()

uint32_t GlfFile::getCurrentRecordCount | ( |  | ) |

Return the number of records that have been read/written so far.

Returns
  number of records that have been read/written so far.

Definition at line 483 of file GlfFile.cpp.

{
return(myRecordCount);
}

## getFailure()

GlfStatus::Status GlfFile::getFailure | ( |  | ) |

inline

Get the Status of the last call that sets status.

To remain backwards compatable - will be removed later.

Definition at line 121 of file GlfFile.h.

{
return(getStatus());
}
GlfFile::getStatus
GlfStatus::Status getStatus()
Get the Status of the last call that sets status.
Definition GlfFile.h:128

References getStatus().

## getNextRecord()

bool GlfFile::getNextRecord | ( | GlfRecord & | record | ) |

Gets the nextrecord from the file & stores it in the passed in record.

Parameters

  record | object to populate with the file's next record.

Returns
  true = record was successfully set. false = record not successfully set or for the endMarker record.

Definition at line 368 of file GlfFile.cpp.

{
if(myIsOpenForRead == false)
{
// File is not open for read
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read reference section since the file is not open for reading");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection == HEADER)
{
// The header has not yet been read.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read reference section since the header has not been read.");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection == REF_SECTION)
{
// The reference section has not yet been read.
// TODO - maybe just read the reference section.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read record since a reference section has not been read.");
throw(GlfException(myStatus));
return(false);
}
// Check for end of file. If end of file, return false.
if(isEOF())
{
return(false);
}
// Read the record.
if(record.read(myFilePtr))
{
myStatus = GlfStatus::SUCCESS;
if(record.getRecordType() != 0)
{
return(true);
}
else
{
// Not an error, so no exception thrown, but no more records.
// The next thing is a reference section.
myNextSection = REF_SECTION;
return(false);
}
}
myStatus.setStatus(GlfStatus::UNKNOWN,
"Failed reading a record from the file.");
throw(GlfException(myStatus));
return(false);
}
GlfException
GlfException objects should be thrown by functions that operate on Glf files for exceptions.
Definition GlfException.h:28
GlfFile::isEOF
bool isEOF()
Returns whether or not the end of the file has been reached.
Definition GlfFile.cpp:152
GlfRecord::getRecordType
int getRecordType() const
Return the record type.
Definition GlfRecord.h:126
GlfRecord::read
bool read(IFILE filePtr)
Read the record from the specified file (file MUST be in the correct position for reading a record).
Definition GlfRecord.cpp:65
GlfStatus::setStatus
void setStatus(Status newStatus, const char *newMessage)
Set the status with the specified values.
Definition GlfStatus.cpp:74
GlfStatus::FAIL_ORDER
@ FAIL_ORDER
method failed because it was called out of order, like trying to read a file without opening it for r...
Definition GlfStatus.h:35
GlfStatus::UNKNOWN
@ UNKNOWN
unknown result (default value should never be used)
Definition GlfStatus.h:33
GlfStatus::SUCCESS
@ SUCCESS
method completed successfully.
Definition GlfStatus.h:32

References GlfStatus::FAIL_ORDER, GlfRecord::getRecordType(), isEOF(), GlfRecord::read(), GlfStatus::setStatus(), GlfStatus::SUCCESS, and GlfStatus::UNKNOWN.

Referenced by getNextRefSection().

## getNextRefSection()

bool GlfFile::getNextRefSection | ( | GlfRefSection & | refSection | ) |

Gets the next reference section from the file & stores it in the passed in section, consuming records until a new section is found.

Parameters

  refSection | object to populate with the file's next reference section.

Returns
  true = section was successfully set. false = section was not successfully set.

Definition at line 240 of file GlfFile.cpp.

{
if(myIsOpenForRead == false)
{
// File is not open for read
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read reference section since the file is not open for reading");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection == HEADER)
{
// The header has not yet been read.
// TODO - maybe just read the header.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read reference section since the header has not been read.");
throw(GlfException(myStatus));
return(false);
}
// Keep reading until the next section is found.
if(myNextSection == RECORD)
{
GlfRecord record;
while(getNextRecord(record))
{
// Nothing to do, with the record.
}
}
// Check for end of file. If end of file, return false.
if(isEOF())
{
return(false);
}
if(myNextSection != REF_SECTION)
{
// Failed reading all the records, so throw exception.
myStatus.setStatus(GlfStatus::FAIL_IO,
"Failed to get to a reference section.");
throw(GlfException(myStatus));
return(false);
}
// Ready to read the section:
if(refSection.read(myFilePtr))
{
myStatus = GlfStatus::SUCCESS;
// Next a record should be read.
myNextSection = RECORD;
return(true);
}
// If it is the EOF, just return false.
if(isEOF())
{
return(false);
}
myStatus.setStatus(GlfStatus::UNKNOWN,
"Failed reading a reference section from the file.");
throw(GlfException(myStatus));
return(false);
}
GlfFile::getNextRecord
bool getNextRecord(GlfRecord &record)
Gets the nextrecord from the file & stores it in the passed in record.
Definition GlfFile.cpp:368
GlfRecord
This class allows a user to easily get/set the fields in a GLF record.
Definition GlfRecord.h:29
GlfRefSection::read
bool read(IFILE filePtr)
Read the refSection from the specified file (file MUST be in the correct position for reading a refSe...
Definition GlfRefSection.cpp:79
GlfStatus::FAIL_IO
@ FAIL_IO
method failed due to an I/O issue.
Definition GlfStatus.h:34

References GlfStatus::FAIL_IO, GlfStatus::FAIL_ORDER, getNextRecord(), isEOF(), GlfRefSection::read(), GlfStatus::setStatus(), GlfStatus::SUCCESS, and GlfStatus::UNKNOWN.

## getStatus()

GlfStatus::Status GlfFile::getStatus | ( |  | ) |

inline

Get the Status of the last call that sets status.

Returns
  status of the last method that sets a status.

Definition at line 128 of file GlfFile.h.

{
return(myStatus.getStatus());
}
GlfStatus::getStatus
Status getStatus() const
Return the enum for this status.
Definition GlfStatus.cpp:118

References GlfStatus::getStatus().

Referenced by getFailure().

## getStatusMessage()

const char * GlfFile::getStatusMessage | ( |  | ) |

inline

Get the Status of the last call that sets status.

Returns
  status message of the last method that sets a status.

Definition at line 135 of file GlfFile.h.

{
return(myStatus.getStatusMessage());
}
GlfStatus::getStatusMessage
const char * getStatusMessage() const
Return the status message.
Definition GlfStatus.cpp:125

References GlfStatus::getStatusMessage().

Referenced by GlfFile(), GlfFileReader::GlfFileReader(), and GlfFileWriter::GlfFileWriter().

## isEOF()

bool GlfFile::isEOF | ( |  | ) |

Returns whether or not the end of the file has been reached.

Returns
  true = EOF; false = not eof. If the file is not open, true is returned.

Definition at line 152 of file GlfFile.cpp.

{
if (myFilePtr != NULL)
{
// File Pointer is set, so return if eof.
return(ifeof(myFilePtr));
}
// File pointer is not set, so return true, eof.
return true;
}
ifeof
int ifeof(IFILE file)
Check to see if we have reached the EOF (returns 0 if not EOF).
Definition InputFile.h:654

References ifeof().

Referenced by getNextRecord(), and getNextRefSection().

## openForRead() [1/2]

bool GlfFile::openForRead | ( | const char * | filename | ) |

Open a glf file for reading with the specified filename.

Parameters

  filename | glf file to open for reading.

Returns
  true = success; false = failure.

Definition at line 66 of file GlfFile.cpp.

{
// Reset for any previously operated on files.
resetFile();
myFilePtr = ifopen(filename, "rb");
if (myFilePtr == NULL)
{
std::string errorMessage = "Failed to Open ";
errorMessage += filename;
errorMessage += " for reading";
myStatus.setStatus(GlfStatus::FAIL_IO, errorMessage.c_str());
throw(GlfException(myStatus));
return(false);
}
myIsOpenForRead = true;
// Successfully opened the file.
myStatus = GlfStatus::SUCCESS;
return(true);
}
ifopen
IFILE ifopen(const char *filename, const char *mode, InputFile::ifileCompression compressionMode=InputFile::DEFAULT)
Open a file with the specified name and mode, using a filename of "-" to indicate stdin/stdout.
Definition InputFile.h:562

References GlfStatus::FAIL_IO, ifopen(), GlfStatus::setStatus(), and GlfStatus::SUCCESS.

Referenced by GlfFile(), GlfFileReader::GlfFileReader(), and openForRead().

## openForRead() [2/2]

bool GlfFile::openForRead | ( | const char * | filename,
|  | GlfHeader & | header
| ) |  |

Open a glf file for reading with the specified filename and read the header into the specified header.

Parameters

  filename | glf file to open for reading.
  header | header object to populate with the file's glf header.

Returns
  true = success; false = failure.

Definition at line 92 of file GlfFile.cpp.

{
if(!openForRead(filename))
{
return(false);
}
// Read the header
if(!readHeader(header))
{
return(false);
}
return(true);
}
GlfFile::readHeader
bool readHeader(GlfHeader &header)
Reads the header section from the file and stores it in the passed in header.
Definition GlfFile.cpp:165

References openForRead(), and readHeader().

## openForWrite()

bool GlfFile::openForWrite | ( | const char * | filename,
|  | bool | compressed = `true`
| ) |  |

Open a glf file for writing with the specified filename.

Parameters

  filename | glf file to open for writing.
  compressed | whether or not to compress the file, defaults to true

Returns
  true = success; false = failure.

Definition at line 109 of file GlfFile.cpp.

{
// Reset for any previously operated on files.
resetFile();
if(compressed)
{
myFilePtr = ifopen(filename, "wb", InputFile::BGZF);
}
else
{
myFilePtr = ifopen(filename, "wb", InputFile::UNCOMPRESSED);
}
if (myFilePtr == NULL)
{
std::string errorMessage = "Failed to Open ";
errorMessage += filename;
errorMessage += " for writing";
myStatus.setStatus(GlfStatus::FAIL_IO, errorMessage.c_str());
throw(GlfException(myStatus));
return(false);
}
myIsOpenForWrite = true;
// Successfully opened the file.
myStatus = GlfStatus::SUCCESS;
return(true);
}
InputFile::BGZF
@ BGZF
bgzf file.
Definition InputFile.h:48
InputFile::UNCOMPRESSED
@ UNCOMPRESSED
uncompressed file.
Definition InputFile.h:46

References InputFile::BGZF, GlfStatus::FAIL_IO, ifopen(), GlfStatus::setStatus(), GlfStatus::SUCCESS, and InputFile::UNCOMPRESSED.

Referenced by GlfFile(), and GlfFileWriter::GlfFileWriter().

## readHeader()

bool GlfFile::readHeader | ( | GlfHeader & | header | ) |

Reads the header section from the file and stores it in the passed in header.

Parameters

  header | header object to populate with the file's glf header.

Returns
  true = success; false = failure.

Definition at line 165 of file GlfFile.cpp.

{
if(myIsOpenForRead == false)
{
// File is not open for read
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read header since the file is not open for reading");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection != HEADER)
{
// The header has already been read.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot read header since it has already been read.");
throw(GlfException(myStatus));
return(false);
}
if(header.read(myFilePtr))
{
// The header has now been successfully read.
myNextSection = REF_SECTION;
myStatus = GlfStatus::SUCCESS;
return(true);
}
myStatus.setStatus(GlfStatus::UNKNOWN,
"Failed to read the header.");
throw(GlfException(myStatus));
return(false);
}
GlfHeader::read
bool read(IFILE filePtr)
Read the header from the specified file (file MUST be in the correct position for reading the header)...
Definition GlfHeader.cpp:80

References GlfStatus::FAIL_ORDER, GlfHeader::read(), GlfStatus::setStatus(), GlfStatus::SUCCESS, and GlfStatus::UNKNOWN.

Referenced by openForRead().

## writeHeader()

bool GlfFile::writeHeader | ( | GlfHeader & | header | ) |

Writes the specified header into the file.

Parameters

  header | header object to write into the file.

Returns
  true = success; false = failure.

Definition at line 200 of file GlfFile.cpp.

{
if(myIsOpenForWrite == false)
{
// File is not open for write
// -OR-
// The header has already been written.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write header since the file is not open for writing");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection != HEADER)
{
// The header has already been written.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write header since it has already been written");
throw(GlfException(myStatus));
return(false);
}
if(header.write(myFilePtr))
{
// The header has now been successfully written.
myNextSection = REF_SECTION;
myStatus = GlfStatus::SUCCESS;
return(true);
}
// return the status.
myStatus.setStatus(GlfStatus::UNKNOWN,
"Failed to write the header.");
throw(GlfException(myStatus));
return(false);
}
GlfHeader::write
bool write(IFILE filePtr) const
Write the header to the specified file.
Definition GlfHeader.cpp:141

References GlfStatus::FAIL_ORDER, GlfStatus::setStatus(), GlfStatus::SUCCESS, GlfStatus::UNKNOWN, and GlfHeader::write().

## writeRecord()

bool GlfFile::writeRecord | ( | const GlfRecord & | record | ) |

Writes the specified record into the file.

Parameters

  record | record to write to the file.

Returns
  true = success; false = failure.

Definition at line 429 of file GlfFile.cpp.

{
if(myIsOpenForWrite == false)
{
// File is not open for write
// -OR-
// The header has already been written.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write record since the file is not open for writing");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection == HEADER)
{
// The header has not been written.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write record since the header has not been written");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection != RECORD)
{
// The header has not been written.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write record since a reference section has not been written");
throw(GlfException(myStatus));
return(false);
}
if(record.write(myFilePtr))
{
myStatus = GlfStatus::SUCCESS;
// The record has now been successfully written.
// Check if it was the end marker - if so, set that next a
// reference section is expected.
if(record.getRecordType() == 0)
{
myNextSection = REF_SECTION;
}
return(true);
}
// return the status.
myStatus.setStatus(GlfStatus::UNKNOWN,
"Failed writing a record to the file.");
throw(GlfException(myStatus));
return(false);
}
GlfRecord::write
bool write(IFILE filePtr) const
Write the record to the specified file.
Definition GlfRecord.cpp:113

References GlfStatus::FAIL_ORDER, GlfRecord::getRecordType(), GlfStatus::setStatus(), GlfStatus::SUCCESS, GlfStatus::UNKNOWN, and GlfRecord::write().

Referenced by writeRefSection().

## writeRefSection()

bool GlfFile::writeRefSection | ( | const GlfRefSection & | refSection | ) |

Write the reference section to the file, adding an end marker record if there is a previous section and one has not already been written.

Parameters

  refSection | reference section to write to the file.

Returns
  true = succes; false = failure.

Definition at line 308 of file GlfFile.cpp.

{
if(myIsOpenForWrite == false)
{
// File is not open for write
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write reference section since the file is not open for writing");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection == HEADER)
{
// The header has not been written.
myStatus.setStatus(GlfStatus::FAIL_ORDER,
"Cannot write reference section since the header has not been written");
throw(GlfException(myStatus));
return(false);
}
if(myNextSection == RECORD)
{
// did not write a end marker record, so write one now.
if(!writeRecord(myEndMarker))
{
// Failed to write the end marker record.
myStatus.setStatus(GlfStatus::FAIL_IO,
"Failed to write end of chromosome/section marker.");
throw(GlfException(myStatus));
return(false);
}
}
if(myNextSection != REF_SECTION)
{
// Not ready to write a reference section.
myStatus.setStatus(GlfStatus::FAIL_IO,
"Not ready for a chromosome/section header.");
throw(GlfException(myStatus));
return(false);
}
if(refSection.write(myFilePtr))
{
myStatus = GlfStatus::SUCCESS;
// A reference section has now been successfully written.
myNextSection = RECORD;
return(true);
}
// return the status.
myStatus.setStatus(GlfStatus::UNKNOWN,
"Failed writing a reference section to the file.");
throw(GlfException(myStatus));
return(false);
}
GlfFile::writeRecord
bool writeRecord(const GlfRecord &record)
Writes the specified record into the file.
Definition GlfFile.cpp:429
GlfRefSection::write
bool write(IFILE filePtr) const
Write the refSection to the specified file.
Definition GlfRefSection.cpp:142

References GlfStatus::FAIL_IO, GlfStatus::FAIL_ORDER, GlfStatus::setStatus(), GlfStatus::SUCCESS, GlfStatus::UNKNOWN, GlfRefSection::write(), and writeRecord().

The documentation for this class was generated from the following files:

- glf/GlfFile.h
- glf/GlfFile.cpp