//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Interface of CTextFile. // // $Workfile: $ // $Date: $ // //------------------------------------------------------------------------------------------------------ // $Log: $ // // $NoKeywords: $ //=============================================================================// #ifndef TEXTFILE_H #define TEXTFILE_H #ifdef WIN32 #pragma once #endif #include #include #include #define BUF_SIZE 5000 //------------------------------------------------------------------------------------------------------ // Purpose: CTextFile represents a configuration file. The default delimiters // are { } = \n \r \t ; " and space. Also C++ style comments are ignored by default. // CTextFile only supports reading, a 5000 character word /line buffer // and only supports one pushback //------------------------------------------------------------------------------------------------------ class CTextFile { private: std::string filename; char wordBuf[BUF_SIZE]; char peekBuf[BUF_SIZE]; bool fWordPushed; bool noComments; FILE* theFile; char* delims; char* stringDelims; char* normalDelims; char* blockDelims; char getNextNonWSChar(); bool isDelim(char c); const char* getToken(char* outputBuf); public: explicit CTextFile(const char* filename,bool eliminateComments=true){init(filename,eliminateComments);} explicit CTextFile(const string& filename,bool eliminateComments=true){init(filename.c_str(),eliminateComments);} void init(const char* filename,bool eliminateComments=true); std::string& fileName(){return filename;} void discardBlock(); const char* readString(); const char* readString(char* buf); int readInt(); unsigned long readULong(); const char* getToken(); const char* getLine(); bool isValid(){return theFile!=NULL;} char* currWord(){return wordBuf;} void pushBack(const char* pushTok); char* peekNext(); char* peekNextString(); bool eof(); void reset(); bool discard(char* test); void discard(){getToken();} ~CTextFile(); }; #endif // TEXTFILE_H