Game Development Reference
In-Depth Information
4.
Read a continuous block of data from this stream and return the number of bytes
actually read:
virtual uint64 BlockRead( void* Buf, const uint64 Size )
{
uint64 RealSize =
( Size > GetBytesLeft() ) ? GetBytesLeft() : Size;
5.
Return zero if we have already read everything:
if ( RealSize < 0 ) { return 0; }
memcpy( Buf, ( FFile->GetFileData() + FPosition ),
static_cast<size_t>( RealSize ) );
6.
Advance the current position and return the number of copied bytes:
FPosition += RealSize;
return RealSize;
}
virtual void Seek( const uint64 Position )
{ FPosition = Position; }
virtual uint64 GetFileSize() const
{ return FFile->GetFileSize(); }
virtual uint64 GetFilePos() const
{ return FPosition; }
virtual bool Eof() const
{ return ( FPosition >= GetFileSize() ); }
virtual const ubyte* MapStream() const
{ return FFile->GetFileData(); }
virtual const ubyte* MapStreamFromCurrentPos() const
{ return ( FFile->GetFileData() + FPosition ); }
private:
clPtr<iRawFile> FFile;
uint64 FPosition;
};
7.
The FileMapper uses the following iRawFile interface to abstract the data
access:
class iRawFile: public iObject
{
public:
iRawFile() {};
virtual ~iRawFile() {};
void SetVirtualFileName( const std::string& VFName );
void SetFileName( const std::string& FName );
std::string GetVirtualFileName() const;
std::string GetFileName();
 
Search WWH ::




Custom Search