Files
itgmania212121/stepmania/src/RageFile.h
T

96 lines
2.6 KiB
C++
Raw Normal View History

2003-12-03 20:37:10 +00:00
#ifndef RAGE_FILE_H
#define RAGE_FILE_H
2003-07-22 07:47:27 +00:00
/*
-----------------------------------------------------------------------------
Class: RageFile
Desc: Encapsulates C and C++ file classes to deal with arch-specific oddities.
2003-12-04 08:25:59 +00:00
Copyright (c) 2001-2003 by the person(s) listed below. All rights reserved.
2003-07-22 07:47:27 +00:00
Chris Danford
2003-12-03 20:37:10 +00:00
Steve Checkoway
2003-12-04 08:25:59 +00:00
Glenn Maynard
2003-07-22 07:47:27 +00:00
-----------------------------------------------------------------------------
*/
// call FixSlashes on any path that came from the user
2003-07-22 07:47:27 +00:00
void FixSlashesInPlace( CString &sPath );
CString FixSlashes( CString sPath );
void CollapsePath( CString &sPath );
2003-12-04 08:25:59 +00:00
class RageFileObj;
2003-07-22 07:47:27 +00:00
2003-11-27 07:46:36 +00:00
class RageFile
{
2003-12-04 08:25:59 +00:00
friend class RageFileObj;
public:
enum OpenMode { READ, WRITE };
RageFile();
RageFile( const CString& path, OpenMode mode = READ );
~RageFile() { Close(); }
2003-12-10 05:04:37 +00:00
RageFile( const RageFile &cpy );
2003-12-04 08:25:59 +00:00
2003-12-10 05:04:37 +00:00
/* Use GetRealPath to get the path this file was opened with; use that if you
* want a path that will probably get you the same file again.
*
* GetPath can be overridden by drivers. Use it to get a path for display;
* it may give more information, such as the name of the archive the file
* is in. It has no parsable meaning. */
2003-12-04 08:25:59 +00:00
const CString &GetRealPath() const { return m_Path; }
CString GetPath() const;
bool Open( const CString& path, OpenMode mode = READ );
void Close();
bool IsOpen() const { return m_File != NULL; }
2003-12-10 05:04:37 +00:00
OpenMode GetOpenMode() const { return m_Mode; }
2003-12-04 08:25:59 +00:00
bool AtEOF() const { return m_EOF; }
CString GetError() const { return m_Error; }
void ClearError() { m_Error = ""; }
2003-12-10 05:04:37 +00:00
2003-12-04 08:25:59 +00:00
int Tell() const { return m_FilePos; }
int Seek( int offset );
int SeekCur( int offset );
int GetFileSize();
void Rewind();
/* Raw I/O: */
int Write( const void *buffer, size_t bytes );
int Write( const CString& string ) { return Write( string.data(), string.size() ); }
int Read( void *buffer, size_t bytes );
2003-12-10 05:04:37 +00:00
int Read( CString &buffer, size_t bytes );
2003-12-04 08:25:59 +00:00
2003-12-04 21:10:16 +00:00
/* These are just here to make wrappers (eg. vorbisfile, SDL_rwops) easier. */
int Write( const void *buffer, size_t bytes, int nmemb );
int Read( void *buffer, size_t bytes, int nmemb );
int Seek( int offset, int whence );
2003-12-04 08:25:59 +00:00
/* Line-based I/O: */
CString GetLine();
int GetLine( CString &out );
int PutLine( const CString &str );
protected:
void SetError( const CString &err ) { m_Error = err; } /* called by RageFileObj::SetError */
2003-11-27 07:46:36 +00:00
private:
2003-12-04 08:25:59 +00:00
void ResetBuf();
RageFileObj *m_File;
CString m_Path;
OpenMode m_Mode;
CString m_Error;
bool m_EOF;
int m_FilePos;
2003-12-03 23:50:53 +00:00
enum { BSIZE = 256 };
char m_Buffer[BSIZE];
char *m_pBuf;
int m_BufUsed;
2003-11-27 07:46:36 +00:00
};
2003-07-22 07:47:27 +00:00
#endif