|
|
|
#ifndef _DEV_TEXTFILE_H
|
|
|
|
#define _DEV_TEXTFILE_H
|
|
|
|
|
|
|
|
|
|
|
|
namespace dev
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
* ASCII-7 text file parser. Doesnt throw exceptions.
|
|
|
|
*/
|
|
|
|
class TextFile
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
/** Error code. */
|
|
|
|
enum ErrorType
|
|
|
|
{
|
|
|
|
/** No error. */
|
|
|
|
ERROR_NONE,
|
|
|
|
/** File open failed. */
|
|
|
|
ERROR_OPEN,
|
|
|
|
/** File reading failed. */
|
|
|
|
ERROR_READ,
|
|
|
|
/** Syntax error. */
|
|
|
|
ERROR_PARSE
|
|
|
|
};
|
|
|
|
|
|
|
|
/** Opens a file. */
|
|
|
|
explicit TextFile( const char* filename );
|
|
|
|
|
|
|
|
///
|
|
|
|
~TextFile();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reads a single character.
|
|
|
|
* @return true if read ok.
|
|
|
|
*/
|
|
|
|
bool readChar( char* ch );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Peeks a single character.
|
|
|
|
* @return true if peek ok.
|
|
|
|
*/
|
|
|
|
bool peekChar( char* ch );
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Reads whitespace delimited string.
|
|
|
|
* If the string doesnt fit to the buffer then
|
|
|
|
* the rest of the string is skipped. Buffer
|
|
|
|
* is always 0-terminated.
|
|
|
|
* @param buf [out] Pointer to string buffer.
|
|
|
|
* @param size String buffer size. Must be larger than 0.
|
|
|
|
* @return false if end-of-file reached before any characters was read.
|
|
|
|
*/
|
|
|
|
bool readString( char* buf, int size );
|
|
|
|
|
|
|
|
/** Skips the rest of the line. */
|
|
|
|
void skipLine();
|
|
|
|
|
|
|
|
/** Reads hex integer. Skips preceding whitespace. */
|
|
|
|
long readHex();
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Skips whitespace characters.
|
|
|
|
* @return false if end-of-file reached.
|
|
|
|
*/
|
|
|
|
bool skipWhitespace();
|
|
|
|
|
|
|
|
/** Returns true if end-of-file have been reached. */
|
|
|
|
bool eof() const;
|
|
|
|
|
|
|
|
/** Returns error code or 0 (ERROR_NONE) if no error. */
|
|
|
|
ErrorType error() const;
|
|
|
|
|
|
|
|
/** Returns line number of last successful read character. */
|
|
|
|
int line() const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
class TextFileImpl;
|
|
|
|
TextFileImpl* m_this;
|
|
|
|
|
|
|
|
TextFile( const TextFile& );
|
|
|
|
TextFile& operator=( const TextFile& );
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
} // dev
|
|
|
|
|
|
|
|
|
|
|
|
#endif // _DEV_TEXTFILE_H
|
|
|
|
/*
|
|
|
|
* Copyright (c) 2001 Jani Kajala
|
|
|
|
*
|
|
|
|
* Permission to use, copy, modify, distribute and sell this
|
|
|
|
* software and its documentation for any purpose is hereby
|
|
|
|
* granted without fee, provided that the above copyright notice
|
|
|
|
* appear in all copies and that both that copyright notice and
|
|
|
|
* this permission notice appear in supporting documentation.
|
|
|
|
* Jani Kajala makes no representations about the suitability
|
|
|
|
* of this software for any purpose. It is provided "as is"
|
|
|
|
* without express or implied warranty.
|
|
|
|
*/
|