mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-08-09 10:19:38 +00:00
1
This commit is contained in:
@@ -0,0 +1,131 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef FILEBUFFER_H
|
||||
#define FILEBUFFER_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
#include "tier1/smartptr.h"
|
||||
#include "tier2/p4helpers.h"
|
||||
|
||||
class CFileBuffer
|
||||
{
|
||||
public:
|
||||
CFileBuffer( int size )
|
||||
{
|
||||
m_pData = new unsigned char[size];
|
||||
#ifdef _DEBUG
|
||||
m_pUsed = new const char *[size];
|
||||
memset( m_pUsed, 0, size * sizeof( const char * ) );
|
||||
#endif
|
||||
m_Size = size;
|
||||
m_pCurPos = m_pData;
|
||||
#ifdef _DEBUG
|
||||
memset( m_pData, 0xbaadf00d, size );
|
||||
#endif
|
||||
}
|
||||
~CFileBuffer()
|
||||
{
|
||||
delete [] m_pData;
|
||||
#ifdef _DEBUG
|
||||
delete [] m_pUsed;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifdef _DEBUG
|
||||
void TestWritten( int EndOfFileOffset )
|
||||
{
|
||||
if ( !g_quiet )
|
||||
{
|
||||
printf( "testing to make sure that the whole file has been written\n" );
|
||||
}
|
||||
int i;
|
||||
for( i = 0; i < EndOfFileOffset; i++ )
|
||||
{
|
||||
if( !m_pUsed[i] )
|
||||
{
|
||||
printf( "offset %d not written, end of file invalid!\n", i );
|
||||
assert( 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
void WriteToFile( const char *fileName, int size )
|
||||
{
|
||||
CPlainAutoPtr< CP4File > spFile( g_p4factory->AccessFile( fileName ) );
|
||||
spFile->Edit();
|
||||
FILE *fp = fopen( fileName, "wb" );
|
||||
if( !fp )
|
||||
{
|
||||
MdlWarning( "Can't open \"%s\" for writing!\n", fileName );
|
||||
return;
|
||||
}
|
||||
|
||||
fwrite( m_pData, 1, size, fp );
|
||||
|
||||
fclose( fp );
|
||||
spFile->Add();
|
||||
}
|
||||
|
||||
void WriteAt( int offset, void *data, int size, const char *name )
|
||||
{
|
||||
// printf( "WriteAt: \"%s\" offset: %d end: %d size: %d\n", name, offset, offset + size - 1, size );
|
||||
m_pCurPos = m_pData + offset;
|
||||
|
||||
#ifdef _DEBUG
|
||||
int i;
|
||||
const char **used = m_pUsed + offset;
|
||||
bool bitched = false;
|
||||
for( i = 0; i < size; i++ )
|
||||
{
|
||||
if( used[i] )
|
||||
{
|
||||
if( !bitched )
|
||||
{
|
||||
printf( "overwrite at %d! (overwriting \"%s\" with \"%s\")\n", i + offset, used[i], name );
|
||||
assert( 0 );
|
||||
bitched = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
used[i] = name;
|
||||
}
|
||||
}
|
||||
#endif // _DEBUG
|
||||
|
||||
Append( data, size );
|
||||
}
|
||||
int GetOffset( void )
|
||||
{
|
||||
return m_pCurPos - m_pData;
|
||||
}
|
||||
void *GetPointer( int offset )
|
||||
{
|
||||
return m_pData + offset;
|
||||
}
|
||||
private:
|
||||
void Append( void *data, int size )
|
||||
{
|
||||
assert( m_pCurPos + size - m_pData < m_Size );
|
||||
memcpy( m_pCurPos, data, size );
|
||||
m_pCurPos += size;
|
||||
}
|
||||
CFileBuffer(); // undefined
|
||||
int m_Size;
|
||||
unsigned char *m_pData;
|
||||
unsigned char *m_pCurPos;
|
||||
#ifdef _DEBUG
|
||||
const char **m_pUsed;
|
||||
#endif
|
||||
};
|
||||
|
||||
|
||||
#endif // FILEBUFFER_H
|
||||
Reference in New Issue
Block a user