00001 #include <assert.h>
00002 #include <direct.h>
00003 #include "IGS_FileIo.h"
00004
00005
00006
00007
00008
00009
00010 IGS_FileIo::IGS_FileIo()
00011 :
00012 m_Buffer( NULL ),
00013 m_BufferSize( 0 )
00014 {
00015 }
00016
00017
00018
00019
00020
00021
00022 IGS_FileIo::IGS_FileIo( const IGS_FileIo& right )
00023 {
00024 assert( false );
00025 }
00026
00027
00028
00029
00030
00031
00032 IGS_FileIo::~IGS_FileIo()
00033 {
00034 delete[] m_Buffer;
00035 m_BufferSize = 0;
00036
00037 }
00038
00039
00040
00041
00042
00043
00044 void IGS_FileIo::AddObject( IGS_Object* addme )
00045 {
00046 m_Objects.push_back( addme );
00047 }
00048
00049
00050
00051
00052
00053
00054 void IGS_FileIo::ClearObjects()
00055 {
00056 m_Objects.clear();
00057 }
00058
00059
00060
00061
00062
00063
00064 void IGS_FileIo::ReallocateBuffer( const int bufferSize )
00065 {
00066 delete[] m_Buffer;
00067 m_Buffer = new char[ bufferSize ];
00068 m_BufferSize = bufferSize;
00069 }
00070
00071
00072
00073
00074
00075
00076 void IGS_FileIo::SaveObjectsToFile( const char* filename )
00077 {
00078
00079 int bufferSize = 0;
00080 int i;
00081 int size = m_Objects.size();
00082 for( i = 0; i < size; i++ )
00083 {
00084 IGS_Object* object = m_Objects[ i ];
00085 bufferSize += object->BinaryFileSize();
00086 }
00087
00088
00089 this->ReallocateBuffer( bufferSize );
00090 char* bufferIndex = m_Buffer;
00091
00092
00093 for( i = 0; i < size; i++ )
00094 {
00095 IGS_Object* object = m_Objects[ i ];
00096 object->WriteBinary( bufferIndex );
00097 }
00098
00099
00100 FILE* file = ::fopen( filename, "wb" );
00101 assert( file != NULL );
00102
00103
00104 int written = ::fwrite( m_Buffer, m_BufferSize, 1, file );
00105 if( written != 1 )
00106 {
00107 char directory[ 256 ] = "";
00108 ::getcwd( directory, 256 );
00109 assert( written == 1 );
00110 }
00111
00112
00113 ::fclose( file );
00114 }