basic/geometry/IGS/IGS_FileIo.cpp

Go to the documentation of this file.
00001 #include <assert.h>
00002 #include <direct.h>
00003 #include "IGS_FileIo.h"
00004 
00005 //=============================================================================
00006 // Constructor
00007 //
00008 // Description: Constructor
00009 //=============================================================================
00010 IGS_FileIo::IGS_FileIo()
00011 :
00012         m_Buffer( NULL ),
00013         m_BufferSize( 0 )
00014 {
00015 }
00016 
00017 //=============================================================================
00018 // Copy Constructor
00019 //
00020 // Description: Copy Constructor
00021 //=============================================================================
00022 IGS_FileIo::IGS_FileIo( const IGS_FileIo& right )
00023 {
00024         assert( false );
00025 }
00026 
00027 //=============================================================================
00028 // Destructor
00029 //
00030 // Description: Destructor
00031 //=============================================================================
00032 IGS_FileIo::~IGS_FileIo()
00033 {
00034         delete[] m_Buffer;
00035         m_BufferSize = 0;
00036 
00037 }
00038 
00039 //=============================================================================
00040 // AddObject
00041 //
00042 // Description: Adds and object to the current set of objects to save
00043 //=============================================================================
00044 void IGS_FileIo::AddObject( IGS_Object* addme )
00045 {
00046         m_Objects.push_back( addme );
00047 }
00048 
00049 //=============================================================================
00050 // SaveObjectsToFile
00051 //
00052 // Description: Saves all the objects added to a single file
00053 //=============================================================================
00054 void IGS_FileIo::ClearObjects()
00055 {
00056         m_Objects.clear();
00057 }
00058 
00059 //=============================================================================
00060 // ReallocateBuffer
00061 //
00062 // Description: Reallocates the memorybuffer used to save the files
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 // SaveObjectsToFile
00073 //
00074 // Description: Saves all the objects added to a single file
00075 //=============================================================================
00076 void IGS_FileIo::SaveObjectsToFile( const char* filename )
00077 {
00078         //determine the size of the buffer that we're going to need
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         //allocate the buffer in RAM
00089         this->ReallocateBuffer( bufferSize );
00090         char* bufferIndex = m_Buffer;
00091 
00092         //write the objects out to the buffer
00093         for( i = 0; i < size; i++ )
00094         {
00095                 IGS_Object* object = m_Objects[ i ];
00096                 object->WriteBinary( bufferIndex );
00097         }
00098 
00099         //open the file on disk
00100         FILE* file = ::fopen( filename, "wb" );
00101         assert( file != NULL );
00102 
00103         //write the buffer into the file
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         //close the file
00113         ::fclose( file );
00114 }

Generated on Sat Apr 1 21:30:32 2006 for Motion Planning Kernel by  doxygen 1.4.6-NO