This commit is contained in:
Glenn Maynard
2004-12-10 08:53:52 +00:00
parent 287a150db7
commit bcba89a2c9
+32 -23
View File
@@ -18,20 +18,30 @@ struct RageFileObjMemFile
class RageFileObjMem: public RageFileObj
{
public:
RageFileObjMem( RageFileObjMemFile *pFile );
~RageFileObjMem();
int ReadInternal( void *buffer, size_t bytes );
int WriteInternal( const void *buffer, size_t bytes );
int SeekInternal( int offset );
int GetFileSize() const;
RageFileObj *Copy() const;
private:
RageFileObjMemFile *m_pFile;
int m_iFilePos;
};
public:
RageFileObjMem( RageFileObjMemFile *pFile )
{
RageFileObjMem::RageFileObjMem( RageFileObjMemFile *pFile )
{
m_pFile = pFile;
m_iFilePos = 0;
++m_pFile->m_iRefs;
}
}
~RageFileObjMem()
{
RageFileObjMem::~RageFileObjMem()
{
m_pFile->m_Mutex.Lock();
const int iRefs = --m_pFile->m_iRefs;
const bool bShouldDelete = (iRefs == 0 && m_pFile->m_bDeleted);
@@ -42,10 +52,10 @@ public:
* delete it. */
if( bShouldDelete )
delete m_pFile;
}
}
int ReadInternal( void *buffer, size_t bytes )
{
int RageFileObjMem::ReadInternal( void *buffer, size_t bytes )
{
m_pFile->m_Mutex.Lock();
m_iFilePos = min( m_iFilePos, GetFileSize() );
@@ -55,32 +65,32 @@ public:
m_pFile->m_Mutex.Unlock();
return bytes;
}
}
int WriteInternal( const void *buffer, size_t bytes )
{
int RageFileObjMem::WriteInternal( const void *buffer, size_t bytes )
{
m_pFile->m_Mutex.Lock();
m_pFile->m_sBuf.append( (const char *) buffer, bytes );
m_pFile->m_Mutex.Unlock();
m_iFilePos += bytes;
return bytes;
}
}
int SeekInternal( int offset )
{
int RageFileObjMem::SeekInternal( int offset )
{
m_iFilePos = clamp( offset, 0, GetFileSize() );
return m_iFilePos;
}
}
int GetFileSize() const
{
int RageFileObjMem::GetFileSize() const
{
LockMut(m_pFile->m_Mutex);
return m_pFile->m_sBuf.size();
}
}
RageFileObj *Copy() const
{
RageFileObj *RageFileObjMem::Copy() const
{
m_pFile->m_Mutex.Unlock();
++m_pFile->m_iRefs;
m_pFile->m_Mutex.Lock();
@@ -89,8 +99,7 @@ public:
pRet->m_iFilePos = m_iFilePos;
return pRet;
}
};
}
RageFileDriverMem::RageFileDriverMem():