casa
5.7.0-16
|
A generic class to read a file containing an ASDM table as a stream. More...
#include <TableStreamReader.h>
Public Member Functions | |
TableStreamReader () | |
An empty constructor. More... | |
virtual | ~TableStreamReader () |
The destructor. More... | |
void | open (const std::string &directory) |
Opens a file expected to contain an ASDM table of type T with rows of type R. More... | |
void | reset () |
Repositions the read head to the beginning of the table. More... | |
const std::vector< R * > & | nextNRows (unsigned int nRows) |
Reads at most n rows in the file, creates as many memory representations of these rows and return the reference of a vector of pointers on these representations. More... | |
const std::vector< R * > & | untilNBytes (unsigned int nBytes) |
Reads as many rows as possible in the file, keeps their in memory representation until the number of read bytes is greater or equal a number of bytes, n, passed as a parameter to the method. More... | |
bool | hasRows () |
Returns true if the end of the file has not been reached. More... | |
void | close () |
Releases all the resources allocated to the instance which can be reused with another file. More... | |
Private Types | |
enum | State { S_CLOSED, S_OPENED } |
enum | Transition { T_OPEN, T_CHECK, T_RESET, T_READ, T_CLOSE } |
Private Member Functions | |
void | checkState (Transition t, const std::string &methodName) const |
void | clear () |
Empty the local storage containing the rows obtained during the last read operation. More... | |
void | skipUntilEmptyLine (int maxSkips) |
std::string | nextLine () |
std::pair< std::string, std::string > | headerField2Pair (const std::string &hf) |
std::string | requireMIMEHeader () |
std::pair< std::string, std::string > | requireHeaderField (const std::string &hf) |
void | requireBoundary (const std::string &boundary, int maxLines) |
std::string | accumulateUntilBoundary (const std::string &boundary, int maxLines) |
std::string | requireBoundaryInCT (const std::string &ctValue) |
std::string | unquote (const std::string &s, std::string &unquoted) |
Private Attributes | |
std::string | tablePath |
std::ifstream | tableFile |
std::string | currentLine |
std::string | boundary_1 |
off_t | fileSizeInBytes |
off_t | endBoundarySizeInBytes |
asdm::EndianIFStream | eifs |
std::vector< std::string > | attributesSeq |
asdm::ASDM | asdm |
std::vector< R * > | rows |
char * | readBuffer |
std::streampos | whereRowsStart |
State | currentState |
A generic class to read a file containing an ASDM table as a stream.
The purpose of this class is to provide the programmer with a way to read a file containing an ASDM table by successive slices. Each slice is transformed into the in memory representation of the rows which have been read. A slice can be specified in two ways :
Remarks
getXXXX
(e.g. getAntenna
of getPointing
) which load entirely the tables into memory. T | The parameter T must be the type of one of the tables which can be found in an ASDM (e.g. AntennaTable) |
R | The parameter R must be the type of the rows which make the content of a table of type T (e.g. AntennaRow is T is AntennaTable). |
Definition at line 39 of file TableStreamReader.h.
|
private |
Enumerator | |
---|---|
S_CLOSED | |
S_OPENED |
Definition at line 265 of file TableStreamReader.h.
|
private |
Enumerator | |
---|---|
T_OPEN | |
T_CHECK | |
T_RESET | |
T_READ | |
T_CLOSE |
Definition at line 266 of file TableStreamReader.h.
|
inline |
An empty constructor.
Definition at line 44 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::boundary_1, asdm::TableStreamReader< T, R >::currentState, asdm::TableStreamReader< T, R >::readBuffer, READBUFFERSIZE, and asdm::TableStreamReader< T, R >::S_CLOSED.
|
inlinevirtual |
The destructor.
Definition at line 49 of file TableStreamReader.h.
|
inlineprivate |
cout << "Entering accumulateUntilBoundary with maxLines = " << maxLines << std::endl;
not sure where this trim is coming from
Definition at line 415 of file TableStreamReader.h.
References casa::name(), asdm::TableStreamReader< T, R >::nextLine(), and casacore::trim().
Referenced by asdm::TableStreamReader< T, R >::open().
|
inlineprivate |
Definition at line 269 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::currentState, casa::name(), asdm::TableStreamReader< T, R >::S_CLOSED, asdm::TableStreamReader< T, R >::S_OPENED, asdm::TableStreamReader< T, R >::T_CHECK, asdm::TableStreamReader< T, R >::T_CLOSE, asdm::TableStreamReader< T, R >::T_OPEN, asdm::TableStreamReader< T, R >::T_READ, and asdm::TableStreamReader< T, R >::T_RESET.
Referenced by asdm::TableStreamReader< T, R >::close(), asdm::TableStreamReader< T, R >::hasRows(), asdm::TableStreamReader< T, R >::nextNRows(), asdm::TableStreamReader< T, R >::open(), asdm::TableStreamReader< T, R >::reset(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
inlineprivate |
Empty the local storage containing the rows obtained during the last read operation.
Definition at line 282 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::rows.
Referenced by asdm::TableStreamReader< T, R >::close(), asdm::TableStreamReader< T, R >::nextNRows(), asdm::TableStreamReader< T, R >::reset(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
inline |
Releases all the resources allocated to the instance which can be reused with another file.
Update the state.
Definition at line 239 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::clear(), asdm::TableStreamReader< T, R >::currentState, free(), asdm::TableStreamReader< T, R >::readBuffer, asdm::TableStreamReader< T, R >::S_CLOSED, asdm::TableStreamReader< T, R >::T_CLOSE, and asdm::TableStreamReader< T, R >::tableFile.
|
inline |
Returns true if the end of the file has not been reached.
Definition at line 231 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::endBoundarySizeInBytes, asdm::TableStreamReader< T, R >::fileSizeInBytes, asdm::TableStreamReader< T, R >::T_CHECK, and asdm::TableStreamReader< T, R >::tableFile.
Referenced by asdm::TableStreamReader< T, R >::nextNRows(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
inlineprivate |
Definition at line 324 of file TableStreamReader.h.
References casa::name(), casacore::trim(), and casacore::value().
Referenced by asdm::TableStreamReader< T, R >::requireHeaderField(), and asdm::TableStreamReader< T, R >::requireMIMEHeader().
|
inlineprivate |
cout << "nextLine has read '" << currentLine << "'" << std::endl;
Definition at line 312 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::currentLine, casa::name(), asdm::TableStreamReader< T, R >::tableFile, and asdm::TableStreamReader< T, R >::tablePath.
Referenced by asdm::TableStreamReader< T, R >::accumulateUntilBoundary(), asdm::TableStreamReader< T, R >::requireBoundary(), asdm::TableStreamReader< T, R >::requireHeaderField(), asdm::TableStreamReader< T, R >::requireMIMEHeader(), and asdm::TableStreamReader< T, R >::skipUntilEmptyLine().
|
inline |
Reads at most n rows in the file, creates as many memory representations of these rows and return the reference of a vector of pointers on these representations.
nRows | the maximum number of rows to read. |
Definition at line 194 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::asdm, asdm::TableStreamReader< T, R >::attributesSeq, asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::clear(), asdm::TableStreamReader< T, R >::eifs, asdm::ASDM::getTable(), asdm::TableStreamReader< T, R >::hasRows(), casa::name(), asdm::TableStreamReader< T, R >::rows, and asdm::TableStreamReader< T, R >::T_READ.
|
inline |
Opens a file expected to contain an ASDM table of type T with rows of type R.
directory | the path to the directory containing the file. |
Open the file.
Determine the size of the file.
And start parsing the content.
cout << "boundary_1 = " << boundary_1 << std::endl;
We have the xmlHeader, let's parse it.
Then it's an "old fashioned" MIME file for tables. Just try to deserialize it with Big_Endian for the bytes ordering.
It's a new (and correct) MIME file for tables.
1st) Look for a BulkStoreRef element with an attribute byteOrder.
Skip the two first children (Entity and ContainerEntity).
We found BulkStoreRef, now look for its attribute byteOrder.
2nd) Look for the Attributes element and grab the names of the elements it contains.
Create an EndianIFStream from the substring containing the binary part.
We do nothing with that but we have to read it.
Let's read numRows but ignore it and rely on the value specified in the ASDM.xml file.
Memorize the starting point of rows.
find where the rows end, seek to near the end
the accumulateUntilBoundary looks at "lines", but it may be starting from inside the binary part where null values might be found At most, there might be 100 bytes of null, or 100 lines. So limit the search to 100 lines before giving up.
the full size of the boundary and anything after it
reset back to start of rows
Update the state
Definition at line 58 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::accumulateUntilBoundary(), asdm::TableStreamReader< T, R >::attributesSeq, asdm::ByteOrder::Big_Endian, asdm::TableStreamReader< T, R >::boundary_1, asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::currentState, asdm::TableStreamReader< T, R >::eifs, asdm::TableStreamReader< T, R >::endBoundarySizeInBytes, asdm::TableStreamReader< T, R >::fileSizeInBytes, asdm::Entity::fromBin(), asdm::ByteOrder::fromString(), casa::name(), asdm::TableStreamReader< T, R >::requireBoundary(), asdm::TableStreamReader< T, R >::requireMIMEHeader(), asdm::TableStreamReader< T, R >::S_OPENED, asdm::TableStreamReader< T, R >::skipUntilEmptyLine(), asdm::TableStreamReader< T, R >::T_OPEN, asdm::TableStreamReader< T, R >::tableFile, asdm::TableStreamReader< T, R >::tablePath, and asdm::TableStreamReader< T, R >::whereRowsStart.
|
inlineprivate |
cout << "Entering require boundary with boundary == '" << boundary << "' and maxLines = " << maxLines << std::endl;
Definition at line 398 of file TableStreamReader.h.
References casa::name(), and asdm::TableStreamReader< T, R >::nextLine().
Referenced by asdm::TableStreamReader< T, R >::open().
|
inlineprivate |
Definition at line 449 of file TableStreamReader.h.
References casa::name(), casa::utilj::split(), and asdm::TableStreamReader< T, R >::unquote().
Referenced by asdm::TableStreamReader< T, R >::requireMIMEHeader().
|
inlineprivate |
Definition at line 373 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::currentLine, asdm::TableStreamReader< T, R >::headerField2Pair(), casa::name(), and asdm::TableStreamReader< T, R >::nextLine().
Referenced by asdm::TableStreamReader< T, R >::requireMIMEHeader().
|
inlineprivate |
MIME-Version
cout << name_value.first << "=" << name_value.second << std::endl; if (currentLine != "MIME-Version: 1.0") // a work around for the case when the very first character is not the expected "M" (happened with some corrupted data).
Content-Type
cout << "boundary_1 =" << boundary_1 << std::endl;
Content-Description name_value = requireHeaderField("CONTENT-DESCRIPTION");
Content-Location name_value = requireHeaderField("CONTENT-LOCATION");
Look for an empty line in the at most 10 subsequent lines.
Definition at line 343 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::boundary_1, asdm::TableStreamReader< T, R >::currentLine, asdm::TableStreamReader< T, R >::headerField2Pair(), casa::name(), asdm::TableStreamReader< T, R >::nextLine(), asdm::TableStreamReader< T, R >::requireBoundaryInCT(), asdm::TableStreamReader< T, R >::requireHeaderField(), casacore::C::second, asdm::TableStreamReader< T, R >::skipUntilEmptyLine(), and asdm::TableStreamReader< T, R >::tablePath.
Referenced by asdm::TableStreamReader< T, R >::open().
|
inline |
Repositions the read head to the beginning of the table.
The internal storage containing the result of the last read operation is cleared.
Definition at line 182 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::clear(), asdm::TableStreamReader< T, R >::T_RESET, asdm::TableStreamReader< T, R >::tableFile, and asdm::TableStreamReader< T, R >::whereRowsStart.
|
inlineprivate |
cout << "Entering skipUntilEmptyLine" << std::endl;
not sure where this trim is coming from
cout << "Exiting skipUntilEmptyLine" << std::endl;
Definition at line 288 of file TableStreamReader.h.
References casa::name(), asdm::TableStreamReader< T, R >::nextLine(), and casacore::trim().
Referenced by asdm::TableStreamReader< T, R >::open(), and asdm::TableStreamReader< T, R >::requireMIMEHeader().
|
inlineprivate |
Definition at line 475 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::requireBoundaryInCT().
|
inline |
Reads as many rows as possible in the file, keeps their in memory representation until the number of read bytes is greater or equal a number of bytes, n, passed as a parameter to the method.
n | the number of read bytes which is used as an upper limit to the read operation. |
Definition at line 214 of file TableStreamReader.h.
References asdm::TableStreamReader< T, R >::asdm, asdm::TableStreamReader< T, R >::attributesSeq, asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::clear(), asdm::TableStreamReader< T, R >::eifs, asdm::ASDM::getTable(), asdm::TableStreamReader< T, R >::hasRows(), casa::name(), asdm::TableStreamReader< T, R >::rows, asdm::TableStreamReader< T, R >::T_READ, and asdm::TableStreamReader< T, R >::tableFile.
|
private |
Definition at line 258 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::nextNRows(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
private |
Definition at line 257 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::nextNRows(), asdm::TableStreamReader< T, R >::open(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
private |
Definition at line 252 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::open(), asdm::TableStreamReader< T, R >::requireMIMEHeader(), and asdm::TableStreamReader< T, R >::TableStreamReader().
|
private |
Definition at line 251 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::nextLine(), asdm::TableStreamReader< T, R >::requireHeaderField(), and asdm::TableStreamReader< T, R >::requireMIMEHeader().
|
private |
Definition at line 267 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::checkState(), asdm::TableStreamReader< T, R >::close(), asdm::TableStreamReader< T, R >::open(), and asdm::TableStreamReader< T, R >::TableStreamReader().
|
private |
Definition at line 256 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::nextNRows(), asdm::TableStreamReader< T, R >::open(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
private |
Definition at line 255 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::hasRows(), and asdm::TableStreamReader< T, R >::open().
|
private |
Definition at line 254 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::hasRows(), and asdm::TableStreamReader< T, R >::open().
|
private |
Definition at line 261 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::close(), and asdm::TableStreamReader< T, R >::TableStreamReader().
|
private |
Definition at line 259 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::clear(), asdm::TableStreamReader< T, R >::nextNRows(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
private |
Definition at line 250 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::close(), asdm::TableStreamReader< T, R >::hasRows(), asdm::TableStreamReader< T, R >::nextLine(), asdm::TableStreamReader< T, R >::open(), asdm::TableStreamReader< T, R >::reset(), and asdm::TableStreamReader< T, R >::untilNBytes().
|
private |
Definition at line 249 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::nextLine(), asdm::TableStreamReader< T, R >::open(), and asdm::TableStreamReader< T, R >::requireMIMEHeader().
|
private |
Definition at line 263 of file TableStreamReader.h.
Referenced by asdm::TableStreamReader< T, R >::open(), and asdm::TableStreamReader< T, R >::reset().