libStatGen Software 1
Loading...
Searching...
No Matches
GlfFile.h
1/*
2 * Copyright (C) 2010 Regents of the University of Michigan
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef __GLF_FILE_H__
19#define __GLF_FILE_H__
20
21#include "InputFile.h"
22#include "GlfHeader.h"
23#include "GlfRefSection.h"
24#include "GlfRecord.h"
25#include "GlfStatus.h"
26
27/// This class allows a user to easily read/write a GLF file.
29{
30public:
31 /// Enum for indicating whether to open the file for read or write.
33 {
34 READ, ///< open for reading.
35 WRITE ///< open for writing.
36 };
37
38 /// Default Constructor.
39 GlfFile();
40
41 /// Constructor that opens the specified file based on the specified mode
42 /// (READ/WRITE). Default is READ.
43 /// \param filename name of the file to open.
44 /// \param mode mode to use for opening the file (defaults to READ).
45 GlfFile(const char* filename, OpenType mode = READ);
46
47 /// Closes the file if there is one open, adding an end marker record
48 /// if there is a previous section and one has not already been written.
49 virtual ~GlfFile();
50
51 /// Open a glf file for reading with the specified filename.
52 /// \param filename glf file to open for reading.
53 /// \return true = success; false = failure.
54 bool openForRead(const char * filename);
55
56 /// Open a glf file for reading with the specified filename and read the
57 /// header into the specified header.
58 /// \param filename glf file to open for reading.
59 /// \param header header object to populate with the file's glf header.
60 /// \return true = success; false = failure.
61 bool openForRead(const char * filename, GlfHeader& header);
62
63 /// Open a glf file for writing with the specified filename.
64 /// \param filename glf file to open for writing.
65 /// \param compressed whether or not to compress the file, defaults to true
66 /// \return true = success; false = failure.
67 bool openForWrite(const char * filename, bool compressed = true);
68
69 /// Close the file if there is one open, adding an end marker record
70 /// if there is a previous section and one has not already been written.
71 void close();
72
73 /// Returns whether or not the end of the file has been reached.
74 /// \return true = EOF; false = not eof.
75 /// If the file is not open, true is returned.
76 bool isEOF();
77
78 /// Reads the header section from the file and stores it in
79 /// the passed in header.
80 /// \param header header object to populate with the file's glf header.
81 /// \return true = success; false = failure.
82 bool readHeader(GlfHeader& header);
83
84 /// Writes the specified header into the file.
85 /// \param header header object to write into the file.
86 /// \return true = success; false = failure.
87 bool writeHeader(GlfHeader& header);
88
89 /// Gets the next reference section from the file & stores it in the
90 /// passed in section, consuming records until a new section is found.
91 /// \param refSection object to populate with the file's next reference
92 /// section.
93 /// \return true = section was successfully set.
94 /// false = section was not successfully set.
95 bool getNextRefSection(GlfRefSection& refSection);
96
97 /// Write the reference section to the file, adding an end marker record
98 /// if there is a previous section and one has not already been written.
99 /// \param refSection reference section to write to the file.
100 /// \return true = succes; false = failure.
101 bool writeRefSection(const GlfRefSection& refSection);
102
103 /// Gets the nextrecord from the file & stores it in the
104 /// passed in record.
105 /// \param record object to populate with the file's next record.
106 /// \return true = record was successfully set.
107 /// false = record not successfully set or for the endMarker record.
108 bool getNextRecord(GlfRecord& record);
109
110 /// Writes the specified record into the file.
111 /// \param record record to write to the file.
112 /// \return true = success; false = failure.
113 bool writeRecord(const GlfRecord& record);
114
115 /// Return the number of records that have been read/written so far.
116 /// \return number of records that have been read/written so far.
117 uint32_t getCurrentRecordCount();
118
119 /// Get the Status of the last call that sets status.
120 /// To remain backwards compatable - will be removed later.
122 {
123 return(getStatus());
124 }
125
126 /// Get the Status of the last call that sets status.
127 /// \return status of the last method that sets a status.
129 {
130 return(myStatus.getStatus());
131 }
132
133 /// Get the Status of the last call that sets status.
134 /// \return status message of the last method that sets a status.
135 inline const char* getStatusMessage()
136 {
137 return(myStatus.getStatusMessage());
138 }
139
140private:
141 /// reset this file including all its attributes.
142 void resetFile();
143
144 /// Pointer to the file
145 IFILE myFilePtr;
146
147 /// Flag to indicate if a file is open for reading.
148 bool myIsOpenForRead;
149 /// Flag to indicate if a file is open for writing.
150 bool myIsOpenForWrite;
151
152 /// End marker that is inserted when writing files if a new section
153 /// is specified without one or if the file is closed without writing
154 /// an endMarker.
155 GlfRecord myEndMarker;
156
157 /// Track the state of this file as to what it is expecting to read next.
158 enum EXPECTED_SECTION
159 {
160 HEADER,
161 REF_SECTION,
162 RECORD
163 } myNextSection;
164
165 /// Keep count of the number of records that have been read/written so far.
166 uint32_t myRecordCount;
167
168 /// The status of the last GlfFile command.
169 GlfStatus myStatus;
170};
171
172
173class GlfFileReader : public GlfFile
174{
175public:
176
177 /// Default Constructor.
179
180 /// Constructor that opens the specified file for read.
181 /// \param filename file to open for reading.
182 GlfFileReader(const char* filename);
183
184 virtual ~GlfFileReader();
185};
186
187
188class GlfFileWriter : public GlfFile
189{
190public:
191 /// Default Constructor.
193
194 /// Constructor that opens the specified file for write.
195 /// \param filename file to open for writing.
196 GlfFileWriter(const char* filename);
197
198 virtual ~GlfFileWriter();
199};
200
201#endif
GlfFileReader()
Default Constructor.
Definition GlfFile.cpp:522
GlfFileWriter()
Default Constructor.
Definition GlfFile.cpp:546
This class allows a user to easily read/write a GLF file.
Definition GlfFile.h:29
bool getNextRefSection(GlfRefSection &refSection)
Gets the next reference section from the file & stores it in the passed in section,...
Definition GlfFile.cpp:240
virtual ~GlfFile()
Closes the file if there is one open, adding an end marker record if there is a previous section and ...
Definition GlfFile.cpp:59
const char * getStatusMessage()
Get the Status of the last call that sets status.
Definition GlfFile.h:135
bool writeRefSection(const GlfRefSection &refSection)
Write the reference section to the file, adding an end marker record if there is a previous section a...
Definition GlfFile.cpp:308
bool openForWrite(const char *filename, bool compressed=true)
Open a glf file for writing with the specified filename.
Definition GlfFile.cpp:109
GlfStatus::Status getFailure()
Get the Status of the last call that sets status.
Definition GlfFile.h:121
bool getNextRecord(GlfRecord &record)
Gets the nextrecord from the file & stores it in the passed in record.
Definition GlfFile.cpp:368
OpenType
Enum for indicating whether to open the file for read or write.
Definition GlfFile.h:33
@ READ
open for reading.
Definition GlfFile.h:34
@ WRITE
open for writing.
Definition GlfFile.h:35
GlfFile()
Default Constructor.
Definition GlfFile.cpp:23
bool openForRead(const char *filename)
Open a glf file for reading with the specified filename.
Definition GlfFile.cpp:66
void close()
Close the file if there is one open, adding an end marker record if there is a previous section and o...
Definition GlfFile.cpp:142
bool writeHeader(GlfHeader &header)
Writes the specified header into the file.
Definition GlfFile.cpp:200
bool readHeader(GlfHeader &header)
Reads the header section from the file and stores it in the passed in header.
Definition GlfFile.cpp:165
uint32_t getCurrentRecordCount()
Return the number of records that have been read/written so far.
Definition GlfFile.cpp:483
GlfStatus::Status getStatus()
Get the Status of the last call that sets status.
Definition GlfFile.h:128
bool isEOF()
Returns whether or not the end of the file has been reached.
Definition GlfFile.cpp:152
bool writeRecord(const GlfRecord &record)
Writes the specified record into the file.
Definition GlfFile.cpp:429
This class allows a user to easily get/set the fields in a GLF header.
Definition GlfHeader.h:30
This class allows a user to easily get/set the fields in a GLF record.
Definition GlfRecord.h:29
This class allows a user to easily get/set the fields in a GLF section/chromosome header.
This class is used to track the status results of some methods in the GLF classes using the status en...
Definition GlfStatus.h:27
const char * getStatusMessage() const
Return the status message.
Status getStatus() const
Return the enum for this status.
Status
Return value enum for the GlfFile class methods.
Definition GlfStatus.h:31
Class for easily reading/writing files without having to worry about file type (uncompressed,...
Definition InputFile.h:37