faudes::TokenReader Class Reference

#include <tokenreader.h>

List of all members.


Detailed Description

A TokenReader reads sequential tokens from a file or string.

It can get or peek the next token and it will track line numbers for informative diagnosis output.

The class also implements nested sections. That is, you may search for a (sub-)section within the current section and, hence, implement file formats that do not insist in a particular ordering of the sections (e.g. a Generator consists of states, transitions and events, no matter in which order).

Convenience functions are provided to read a token of a particular type and throws faudes::Exception on token mismatch. You may catch the exception as follows:

 try {
   some tokenreader operations
 }
 catch (faudes::Exception& ex) {
   cerr << "Error reading file (details: " << ex.What() << ")" << endl;
 }
Note that in addition to the documented execeptions all TokenReader functions do pass on faudes ios errors from the Token class.

Definition at line 59 of file tokenreader.h.

Public Types

enum  Mode { File, Stdin, String }
 Mode of operation: read from file, stdin or string. More...

Public Member Functions

 TokenReader (Mode mode, const std::string &rInString="")
 TokenReader constructor.
 TokenReader (const std::string &rFilename)
 Creates a TokenReader for reading complete file.
 ~TokenReader (void)
 Destruct.
bool good (void) const
 Get state of TokenReader stream.
std::string FileName (void) const
 Get the filename.
bool Peek (Token &token)
 Peek next token.
bool Get (Token &token)
 Get next token.
void Rewind (void)
 Rewind stream (must be a seekable stream).
void ReadBegin (const std::string &rLabel)
 Open a section by specified label.
void ReadEnd (const std::string &rLabel)
 Close the current section by matching the previous ReadBegin().
void SeekBegin (const std::string &rLabel)
 Open a section by specified label.
void SeekEnd (const std::string &rLabel)
 Close the current section by matching the previous SeekBegin().
bool Eos (const std::string &rLabel)
 Peek a token and check whether it ends the specified section.
long int ReadInteger (void)
 Read integer token.
double ReadFloat (void)
 Read float token.
const std::string & ReadString (void)
 Read string token.
const std::string & ReadOption (void)
 Read option token.
bool operator>> (Token &token)
 Operator for get.
int Line (void) const
 Return number of lines read.
std::string FileLine (void) const
 Return "filename:line".

Private Attributes

Mode mMode
 input mode
std::istream * mpStream
 istream object pointer
std::ifstream mFStream
 actual stream object, file input
std::istringstream * mpSStream
 actual stream object on heap, string input
std::string mFileName
 Filename.
int mLineCount
 Line counter.
long int mFilePos
 file position
int mLevel
 Level (of nested sections).
std::vector< long int > mLevelPos
 file positions of sections
std::vector< long int > mLevelLine
 file line of sections
std::vector< int > mSeekLevel
 level of recent seek
std::string mLastString
 recent string buffer
bool mHasPeekToken
 validity of peek buffer
Token mPeekToken
 peek buffer


Member Enumeration Documentation

enum faudes::TokenReader::Mode
 

Mode of operation: read from file, stdin or string.

Enumerator:
File 
Stdin 
String 

Definition at line 65 of file tokenreader.h.


Constructor & Destructor Documentation

faudes::TokenReader::TokenReader Mode  mode,
const std::string &  rInString = ""
 

TokenReader constructor.

Parameters:
mode select source: File, Stdin or String
rInString string to read from or filename
Exceptions:
Exception 

Definition at line 31 of file tokenreader.cpp.

faudes::TokenReader::TokenReader const std::string &  rFilename  ) 
 

Creates a TokenReader for reading complete file.

Parameters:
rFilename File to read
Exceptions:
Exception 

Definition at line 66 of file tokenreader.cpp.

faudes::TokenReader::~TokenReader void   ) 
 

Destruct.

Definition at line 87 of file tokenreader.cpp.


Member Function Documentation

bool faudes::TokenReader::Eos const std::string &  rLabel  ) 
 

Peek a token and check whether it ends the specified section.

This function is meant for scanning a section with a while- construct.

 SeekBegin("MySec"); 
 while(!Eos("MySec")) { 
   ... 
 }; 
 SeekEnd("MySec");

Parameters:
rLabel Token label to specify section
Exceptions:
Exception Unexpected eof (id 51)
Returns:
True at end of section

Definition at line 311 of file tokenreader.cpp.

std::string faudes::TokenReader::FileLine void   )  const
 

Return "filename:line".

Definition at line 386 of file tokenreader.cpp.

std::string faudes::TokenReader::FileName void   )  const
 

Get the filename.

Returns:
Filename

Definition at line 116 of file tokenreader.cpp.

bool faudes::TokenReader::Get Token token  ) 
 

Get next token.

False indicates eof.

Parameters:
token Reference to token
Exceptions:
Exception faudes exception ios (id 1)
Returns:
True for a valid token, false for eof

Definition at line 143 of file tokenreader.cpp.

bool faudes::TokenReader::good void   )  const
 

Get state of TokenReader stream.

Returns:
std::stream.good()

int faudes::TokenReader::Line void   )  const
 

Return number of lines read.

Returns:
Number of lines read

Definition at line 381 of file tokenreader.cpp.

bool faudes::TokenReader::operator>> Token token  )  [inline]
 

Operator for get.

Definition at line 278 of file tokenreader.h.

bool faudes::TokenReader::Peek Token token  ) 
 

Peek next token.

False indicates eof.

Parameters:
token Reference to token
Exceptions:
Exception 
Returns:
True for a valid token, false for eof

Definition at line 121 of file tokenreader.cpp.

void faudes::TokenReader::ReadBegin const std::string &  rLabel  ) 
 

Open a section by specified label.

This function searches for the section on this level, it skips any sections on levels below this level, and it will wrap to the begin of the current section. In the case of success, the matching begin token is the last token read. After processing the section, a matching ReadEnd(label) must be called.

Parameters:
rLabel Token label to specify section
Exceptions:
Exception Section begin label not found (id 51)

Definition at line 236 of file tokenreader.cpp.

void faudes::TokenReader::ReadEnd const std::string &  rLabel  ) 
 

Close the current section by matching the previous ReadBegin().

Reads all tokens up to and including end of current section.

Parameters:
rLabel Token label to specify section
Exceptions:
Exception Section end label not found (id 51)

Definition at line 285 of file tokenreader.cpp.

double faudes::TokenReader::ReadFloat void   ) 
 

Read float token.

Exceptions:
Exception Token mismatch (id 50)
Returns:
value of index token

Definition at line 339 of file tokenreader.cpp.

long int faudes::TokenReader::ReadInteger void   ) 
 

Read integer token.

Exceptions:
Exception Token mismatch (id 50)
Returns:
value of index token

Definition at line 327 of file tokenreader.cpp.

const std::string & faudes::TokenReader::ReadOption void   ) 
 

Read option token.

Exceptions:
Exception Token mismatch (id 50)
Returns:
value of name token

Definition at line 365 of file tokenreader.cpp.

const std::string & faudes::TokenReader::ReadString void   ) 
 

Read string token.

Exceptions:
Exception Token mismatch (id 50)
Returns:
value of name token

Definition at line 351 of file tokenreader.cpp.

void faudes::TokenReader::Rewind void   ) 
 

Rewind stream (must be a seekable stream).

Exceptions:
Exception 

Definition at line 92 of file tokenreader.cpp.

void faudes::TokenReader::SeekBegin const std::string &  rLabel  ) 
 

Open a section by specified label.

This function searches for the section on this level and any descending level. However, this funtion will not rewind to the beginning of the current section (this may change in a future revision). In the case of success, the matching begin token is the last token read. After processing the section, a matching SeekEnd(label) must be called.

Parameters:
rLabel Label to specify section
Exceptions:
Exception Section begin not found (id 51)

Definition at line 172 of file tokenreader.cpp.

void faudes::TokenReader::SeekEnd const std::string &  rLabel  ) 
 

Close the current section by matching the previous SeekBegin().

Reads all tokens up to the level when SeekBegin() was called.

Parameters:
rLabel Token label to specify section
Exceptions:
Exception Section end label not found (id 51) Previous level not found/ unmachted call (id 52)

Definition at line 208 of file tokenreader.cpp.


Member Data Documentation

std::string faudes::TokenReader::mFileName [private]
 

Filename.

Definition at line 309 of file tokenreader.h.

long int faudes::TokenReader::mFilePos [private]
 

file position

Definition at line 315 of file tokenreader.h.

std::ifstream faudes::TokenReader::mFStream [private]
 

actual stream object, file input

Definition at line 303 of file tokenreader.h.

bool faudes::TokenReader::mHasPeekToken [private]
 

validity of peek buffer

Definition at line 333 of file tokenreader.h.

std::string faudes::TokenReader::mLastString [private]
 

recent string buffer

Definition at line 330 of file tokenreader.h.

int faudes::TokenReader::mLevel [private]
 

Level (of nested sections).

Definition at line 318 of file tokenreader.h.

std::vector<long int> faudes::TokenReader::mLevelLine [private]
 

file line of sections

Definition at line 324 of file tokenreader.h.

std::vector<long int> faudes::TokenReader::mLevelPos [private]
 

file positions of sections

Definition at line 321 of file tokenreader.h.

int faudes::TokenReader::mLineCount [private]
 

Line counter.

Definition at line 312 of file tokenreader.h.

Mode faudes::TokenReader::mMode [private]
 

input mode

Definition at line 297 of file tokenreader.h.

Token faudes::TokenReader::mPeekToken [private]
 

peek buffer

Definition at line 336 of file tokenreader.h.

std::istringstream* faudes::TokenReader::mpSStream [private]
 

actual stream object on heap, string input

Definition at line 306 of file tokenreader.h.

std::istream* faudes::TokenReader::mpStream [private]
 

istream object pointer

Definition at line 300 of file tokenreader.h.

std::vector<int> faudes::TokenReader::mSeekLevel [private]
 

level of recent seek

Definition at line 327 of file tokenreader.h.


The documentation for this class was generated from the following files:
Generated on Fri May 9 11:26:48 2008 for libFAUDES 2.09b by  doxygen 1.4.4