From 8915e3944a5280dcb59157f8d903a3681f7d6762 Mon Sep 17 00:00:00 2001 From: Glenn Maynard Date: Fri, 10 Dec 2004 10:04:32 +0000 Subject: [PATCH] simplify; use RageBasicFile instead of RageFileObj --- stepmania/src/RageFile.cpp | 5 +++++ stepmania/src/RageFile.h | 8 +++++++- stepmania/src/RageFileDriver.h | 4 ++-- stepmania/src/RageFileDriverDirect.cpp | 4 ++-- stepmania/src/RageFileDriverMemory.cpp | 5 +++-- stepmania/src/RageFileDriverMemory.h | 2 +- stepmania/src/RageFileDriverZip.cpp | 4 ++-- stepmania/src/RageFileManager.cpp | 26 +++++++++++++------------- stepmania/src/RageFileManager.h | 9 ++++----- 9 files changed, 39 insertions(+), 28 deletions(-) diff --git a/stepmania/src/RageFile.cpp b/stepmania/src/RageFile.cpp index c5c5b9d1b8..e7c5bee5ec 100644 --- a/stepmania/src/RageFile.cpp +++ b/stepmania/src/RageFile.cpp @@ -24,6 +24,11 @@ RageFile::RageFile( const RageFile &cpy ): m_Mode = cpy.m_Mode; } +RageBasicFile *RageFile::Copy() const +{ + return new RageFile( *this ); +} + CString RageFile::GetPath() const { if ( !IsOpen() ) diff --git a/stepmania/src/RageFile.h b/stepmania/src/RageFile.h index bc7f29a2b2..dbff436551 100644 --- a/stepmania/src/RageFile.h +++ b/stepmania/src/RageFile.h @@ -46,6 +46,11 @@ public: * Flush() to flush pending data, in order to check for errors. */ virtual int Flush() = 0; + /* This returns a descriptive path for the file, or "". */ + virtual CString GetDisplayPath() const { return ""; } + + virtual RageBasicFile *Copy() const = 0; + virtual int GetLine( CString &out ) = 0; virtual int PutLine( const CString &str ) = 0; @@ -73,6 +78,7 @@ public: RageFile(); ~RageFile() { Close(); } RageFile( const RageFile &cpy ); + RageBasicFile *Copy() const; /* 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. @@ -116,7 +122,7 @@ protected: void SetError( const CString &err ); private: - RageFileObj *m_File; + RageBasicFile *m_File; CString m_Path; CString m_sError; int m_Mode; diff --git a/stepmania/src/RageFileDriver.h b/stepmania/src/RageFileDriver.h index 2f81e68131..1336d66ae4 100644 --- a/stepmania/src/RageFileDriver.h +++ b/stepmania/src/RageFileDriver.h @@ -15,7 +15,7 @@ class RageFileDriver public: RageFileDriver( FilenameDB *db ) { FDB = db; } virtual ~RageFileDriver(); - virtual RageFileObj *Open( const CString &path, int mode, int &err ) = 0; + virtual RageBasicFile *Open( const CString &path, int mode, int &err ) = 0; virtual void GetDirListing( const CString &sPath, CStringArray &AddTo, bool bOnlyDirs, bool bReturnPathToo ); virtual RageFileManager::FileType GetFileType( const CString &sPath ); virtual int GetFileSizeInBytes( const CString &sFilePath ); @@ -61,7 +61,7 @@ public: virtual int GetFileSize() const = 0; virtual CString GetDisplayPath() const { return ""; } - virtual RageFileObj *Copy() const { FAIL_M( "Copying unimplemented" ); } + virtual RageBasicFile *Copy() const { FAIL_M( "Copying unimplemented" ); } protected: virtual int SeekInternal( int iOffset ) { FAIL_M( "Seeking unimplemented" ); } diff --git a/stepmania/src/RageFileDriverDirect.cpp b/stepmania/src/RageFileDriverDirect.cpp index c7c5b307b4..a627179339 100644 --- a/stepmania/src/RageFileDriverDirect.cpp +++ b/stepmania/src/RageFileDriverDirect.cpp @@ -47,7 +47,7 @@ public: virtual int WriteInternal( const void *pBuffer, size_t iBytes ); virtual int FlushInternal(); virtual int SeekInternal( int offset ); - virtual RageFileObj *Copy() const; + virtual RageBasicFile *Copy() const; virtual CString GetDisplayPath() const { return path; } virtual int GetFileSize() const; }; @@ -158,7 +158,7 @@ bool RageFileDriverDirect::Remove( const CString &path ) } } -RageFileObj *RageFileObjDirect::Copy() const +RageBasicFile *RageFileObjDirect::Copy() const { int err; RageFileObj *ret = MakeFileObjDirect( path, m_iMode, err ); diff --git a/stepmania/src/RageFileDriverMemory.cpp b/stepmania/src/RageFileDriverMemory.cpp index 6785bc2002..77243a6c49 100644 --- a/stepmania/src/RageFileDriverMemory.cpp +++ b/stepmania/src/RageFileDriverMemory.cpp @@ -83,14 +83,15 @@ int RageFileObjMem::GetFileSize() const return m_pFile->m_sBuf.size(); } -RageFileObjMem::RageFileObjMem( const RageFileObjMem &cpy ) +RageFileObjMem::RageFileObjMem( const RageFileObjMem &cpy ): + RageFileObj( cpy ) { m_pFile = cpy.m_pFile; m_iFilePos = cpy.m_iFilePos; RageFileObjMemFile::AddReference( m_pFile ); } -RageFileObj *RageFileObjMem::Copy() const +RageBasicFile *RageFileObjMem::Copy() const { RageFileObjMem *pRet = new RageFileObjMem( *this ); return pRet; diff --git a/stepmania/src/RageFileDriverMemory.h b/stepmania/src/RageFileDriverMemory.h index 59c3bae3b4..9dcc73fefd 100644 --- a/stepmania/src/RageFileDriverMemory.h +++ b/stepmania/src/RageFileDriverMemory.h @@ -18,7 +18,7 @@ public: int WriteInternal( const void *buffer, size_t bytes ); int SeekInternal( int offset ); int GetFileSize() const; - RageFileObj *Copy() const; + RageBasicFile *Copy() const; /* Retrieve the contents of this file. */ const CString &GetString() const; diff --git a/stepmania/src/RageFileDriverZip.cpp b/stepmania/src/RageFileDriverZip.cpp index 9e1a0c1ace..606b2da212 100644 --- a/stepmania/src/RageFileDriverZip.cpp +++ b/stepmania/src/RageFileDriverZip.cpp @@ -85,7 +85,7 @@ public: int WriteInternal( const void *pBuffer, size_t iBytes ) { SetError( "Not implemented" ); return -1; } int SeekInternal( int iOffset ); int GetFileSize() const { return info.uncompr_size; } - RageFileObj *Copy() const + RageBasicFile *Copy() const { RageException::Throw( "Loading ZIPs from deflated ZIPs is currently disabled; see RageFileObjZipDeflated" ); @@ -108,7 +108,7 @@ public: int SeekInternal( int iOffset ); int GetFileSize() const { return info.uncompr_size; } - RageFileObj *Copy() const + RageBasicFile *Copy() const { RageFileObjZipStored *pRet = new RageFileObjZipStored( zip, info ); pRet->FilePos = FilePos; diff --git a/stepmania/src/RageFileManager.cpp b/stepmania/src/RageFileManager.cpp index fd3d957c57..1aa44680d0 100644 --- a/stepmania/src/RageFileManager.cpp +++ b/stepmania/src/RageFileManager.cpp @@ -20,7 +20,7 @@ static RageEvent *g_Mutex; CString InitialWorkingDirectory; CString DirOfExecutable; -typedef map< const RageFileObj *, RageFileDriver * > FileReferences; +typedef map< const RageBasicFile *, RageFileDriver * > FileReferences; static FileReferences g_Refs; struct LoadedDriver @@ -102,7 +102,7 @@ class RageFileDriverMountpoints: public RageFileDriver { public: RageFileDriverMountpoints(): RageFileDriver( new FilenameDB ) { } - RageFileObj *Open( const CString &path, int mode, int &err ) + RageBasicFile *Open( const CString &path, int mode, int &err ) { err = (mode == RageFile::WRITE)? ERROR_WRITING_NOT_SUPPORTED:ENOENT; return NULL; @@ -593,11 +593,11 @@ static bool SortBySecond( const pair &a, const pair &b ) return a.second < b.second; } -void AddReference( const RageFileObj *obj, RageFileDriver *driver ) +void AddReference( const RageBasicFile *obj, RageFileDriver *driver ) { LockMut( *g_Mutex ); - pair< const RageFileObj *, RageFileDriver * > ref; + pair< const RageBasicFile *, RageFileDriver * > ref; ref.first = obj; ref.second = driver; @@ -607,7 +607,7 @@ void AddReference( const RageFileObj *obj, RageFileDriver *driver ) ASSERT_M( ret.second, ssprintf( "RemoveReference: Duplicate reference (%s)", obj->GetDisplayPath().c_str() ) ); } -void RemoveReference( const RageFileObj *obj ) +void RemoveReference( const RageBasicFile *obj ) { LockMut( *g_Mutex ); @@ -638,7 +638,7 @@ static bool PathUsesSlowFlush( const CString &sPath ) } /* Used only by RageFile: */ -RageFileObj *RageFileManager::Open( CString sPath, int mode, int &err ) +RageBasicFile *RageFileManager::Open( CString sPath, int mode, int &err ) { err = ENOENT; @@ -662,7 +662,7 @@ RageFileObj *RageFileManager::Open( CString sPath, int mode, int &err ) if( path.size() == 0 ) continue; int error; - RageFileObj *ret = ld.driver->Open( path, mode, error ); + RageBasicFile *ret = ld.driver->Open( path, mode, error ); if( ret ) { AddReference( ret, ld.driver ); @@ -680,15 +680,15 @@ RageFileObj *RageFileManager::Open( CString sPath, int mode, int &err ) return NULL; } -/* Copy a RageFileObj for a new RageFile. */ -RageFileObj *RageFileManager::CopyFileObj( const RageFileObj *cpy ) +/* Copy a RageBasicFile for a new RageFile. */ +RageBasicFile *RageFileManager::CopyFileObj( const RageBasicFile *cpy ) { LockMut( *g_Mutex ); FileReferences::const_iterator it = g_Refs.find( cpy ); ASSERT_M( it != g_Refs.end(), ssprintf( "CopyFileObj: Missing reference (%s)", cpy->GetDisplayPath().c_str() ) ); - RageFileObj *ret = cpy->Copy(); + RageBasicFile *ret = cpy->Copy(); /* It's from the same driver as the original. */ AddReference( ret, it->second ); @@ -696,7 +696,7 @@ RageFileObj *RageFileManager::CopyFileObj( const RageFileObj *cpy ) return ret; } -RageFileObj *RageFileManager::OpenForWriting( CString sPath, int mode, int &err ) +RageBasicFile *RageFileManager::OpenForWriting( CString sPath, int mode, int &err ) { /* * The value for a driver to open a file is the number of directories and/or files @@ -748,7 +748,7 @@ RageFileObj *RageFileManager::OpenForWriting( CString sPath, int mode, int &err ASSERT( path.size() ); int error; - RageFileObj *ret = ld.driver->Open( path, mode, error ); + RageBasicFile *ret = ld.driver->Open( path, mode, error ); if( ret ) { AddReference( ret, ld.driver ); @@ -769,7 +769,7 @@ RageFileObj *RageFileManager::OpenForWriting( CString sPath, int mode, int &err return NULL; } -void RageFileManager::Close( RageFileObj *obj ) +void RageFileManager::Close( RageBasicFile *obj ) { if( obj == NULL ) return; diff --git a/stepmania/src/RageFileManager.h b/stepmania/src/RageFileManager.h index 49f12ab2ea..b9ab07d5f2 100644 --- a/stepmania/src/RageFileManager.h +++ b/stepmania/src/RageFileManager.h @@ -10,7 +10,6 @@ extern CString InitialWorkingDirectory; extern CString DirOfExecutable; -class RageFileObj; class RageFileManager { public: @@ -45,12 +44,12 @@ public: void FlushDirCache( CString sPath ); /* Used only by RageFile: */ - RageFileObj *Open( CString sPath, int mode, int &err ); - void Close( RageFileObj *obj ); - RageFileObj *CopyFileObj( const RageFileObj *cpy ); + RageBasicFile *Open( CString sPath, int mode, int &err ); + void Close( RageBasicFile *obj ); + RageBasicFile *CopyFileObj( const RageBasicFile *cpy ); private: - RageFileObj *OpenForWriting( CString sPath, int mode, int &err ); + RageBasicFile *OpenForWriting( CString sPath, int mode, int &err ); }; extern RageFileManager *FILEMAN;