00001
00002
00003
#ifndef RAGE_FILE_BASIC_H
00004
#define RAGE_FILE_BASIC_H
00005
00006
00007
00008
00009 class RageFileBasic
00010 {
00011
public:
00012 virtual ~RageFileBasic() { }
00013
00014
virtual CString GetError() const = 0;
00015 virtual
void ClearError() = 0;
00016 virtual
bool AtEOF() const = 0;
00017
00018
00019
00020
00021 virtual
int Seek(
int iOffset ) = 0;
00022 virtual
int Seek(
int offset,
int whence ) = 0;
00023 virtual
int Tell() const = 0;
00024
00025
00026
00027
00028
00029 virtual
int Read(
void *pBuffer, size_t iBytes ) = 0;
00030 virtual
int Read( CString &buffer,
int bytes = -1 ) = 0;
00031 virtual
int Read(
void *buffer, size_t bytes,
int nmemb ) = 0;
00032
00033
00034 virtual
int Write( const
void *pBuffer, size_t iBytes ) = 0;
00035 virtual
int Write( const CString &sString ) = 0;
00036 virtual
int Write( const
void *buffer, size_t bytes,
int nmemb ) = 0;
00037
00038
00039
00040
00041
00042 virtual
int Flush() = 0;
00043
00044
00045 virtual CString GetDisplayPath()
const {
return ""; }
00046
00047
virtual RageFileBasic *
Copy() const = 0;
00048
00049 virtual
int GetLine( CString &out ) = 0;
00050 virtual
int PutLine( const CString &str ) = 0;
00051
00052 virtual
void EnableCRC32(
bool on=true ) = 0;
00053 virtual
bool GetCRC32( uint32_t *iRet ) = 0;
00054
00055 virtual
int GetFileSize() const = 0;
00056 };
00057
00058 class
RageFileObj: public
RageFileBasic
00059 {
00060
public:
00061
RageFileObj();
00062
virtual ~
RageFileObj();
00063
00064 virtual CString GetError()
const {
return m_sError; }
00065 virtual void ClearError() { SetError(
""); }
00066
00067 bool AtEOF()
const {
return m_bEOF; }
00068
00069
int Seek(
int iOffset );
00070
int Seek(
int offset,
int whence );
00071 int Tell()
const {
return m_iFilePos; }
00072
00073
int Read(
void *pBuffer, size_t iBytes );
00074
int Read( CString &buffer,
int bytes = -1 );
00075
int Read(
void *buffer, size_t bytes,
int nmemb );
00076
00077
int Write(
const void *pBuffer, size_t iBytes );
00078 int Write(
const CString &sString ) {
return Write( sString.data(), sString.size() ); }
00079
int Write(
const void *buffer, size_t bytes,
int nmemb );
00080
00081
int Flush();
00082
00083
int GetLine( CString &out );
00084
int PutLine(
const CString &str );
00085
00086
void EnableCRC32(
bool on=
true );
00087
bool GetCRC32( uint32_t *iRet );
00088
00089
virtual int GetFileSize() const = 0;
00090 virtual CString GetDisplayPath()
const {
return ""; }
00091 virtual RageFileBasic *
Copy()
const {
FAIL_M(
"Copying unimplemented" ); }
00092
00093
protected:
00094 virtual int SeekInternal(
int iOffset ) {
FAIL_M(
"Seeking unimplemented" ); }
00095
virtual int ReadInternal(
void *pBuffer, size_t iBytes ) = 0;
00096
virtual int WriteInternal(
const void *pBuffer, size_t iBytes ) = 0;
00097 virtual int FlushInternal() {
return 0; }
00098
00099
void EnableBuffering();
00100
00101 void SetError(
const CString &sError ) { m_sError = sError; }
00102 CString m_sError;
00103
00104
private:
00105
int FillBuf();
00106
void ResetBuf();
00107
00108 bool m_bEOF;
00109 int m_iFilePos;
00110
00111
00112
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
enum { BSIZE = 1024 };
00129 char *m_pBuffer;
00130 char *m_pBuf;
00131 int m_iBufAvail;
00132
00133
00134
00135
00136 bool m_bCRC32Enabled;
00137 uint32_t m_iCRC32;
00138 };
00139
00140
#endif
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166