Files
itgmania212121/stepmania/src/RageFile.h
T

104 lines
2.7 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
-----------------------------------------------------------------------------
*/
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
{
READ = 0x1,
WRITE = 0x2,
/* Always write directly to the destination file; don't do a safe write. (for logs) */
2004-02-20 06:01:12 +00:00
STREAMED = 0x4,
/* Flush the file to disk on close. Combined with not streaming, this results
* in very safe writes, but is slow. */
SLOW_FLUSH = 0x8
};
2003-12-04 08:25:59 +00:00
RageFile();
RageFile( const CString& path, int mode = READ );
2003-12-04 08:25:59 +00:00
~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, int mode = READ );
2003-12-04 08:25:59 +00:00
void Close();
bool IsOpen() const { return m_File != NULL; }
int 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 );
2004-02-17 21:42:06 +00:00
int GetFileSize() const;
2003-12-04 08:25:59 +00:00
void Rewind();
/* Raw I/O: */
int Read( void *buffer, size_t bytes );
2003-12-21 09:17:39 +00:00
int Read( CString &buffer, int bytes = -1 );
2003-12-12 07:47:38 +00:00
int Write( const void *buffer, size_t bytes );
int Write( const CString& string ) { return Write( string.data(), string.size() ); }
int Flush();
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;
int m_Mode;
2003-12-04 08:25:59 +00:00
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