00001
00002
00003
00004 #include "cddefines.h"
00005 #include "container_classes.h"
00006
00007
00008 #ifdef _MSC_VER
00009
00010 # pragma warning( disable : 4231 )
00011 #endif
00012
00013
00014 INSTANTIATE_MULTI_ARR( bool, lgBOUNDSCHECKVAL );
00015 INSTANTIATE_MULTI_ARR( char, lgBOUNDSCHECKVAL );
00016 INSTANTIATE_MULTI_ARR( int, lgBOUNDSCHECKVAL );
00017 INSTANTIATE_MULTI_ARR( long, lgBOUNDSCHECKVAL );
00018 #ifndef FLT_IS_DBL
00019 INSTANTIATE_MULTI_ARR( realnum,lgBOUNDSCHECKVAL );
00020 #endif
00021 INSTANTIATE_MULTI_ARR( double, lgBOUNDSCHECKVAL );
00022
00025 void do_dump_state(const void* buf, size_t nelem, size_t size, FILE* out, int32 magic)
00026 {
00027 DEBUG_ENTRY( "do_dump_state()" );
00028
00029 bool lgErr = ( fwrite( &magic, sizeof(int32), 1, out ) != 1 );
00030 int32 help = (int32)sizeof(size_t);
00031 lgErr = lgErr || ( fwrite( &help, sizeof(int32), 1, out ) != 1 );
00032 lgErr = lgErr || ( fwrite( &size, sizeof(size_t), 1, out ) != 1 );
00033 lgErr = lgErr || ( fwrite( buf, size, nelem, out ) != nelem );
00034 if( lgErr )
00035 {
00036 fprintf( ioQQQ, " I/O error while dumping state!\n" );
00037 cdEXIT(EXIT_FAILURE);
00038 }
00039 }
00040
00045 void do_restore_state(void* buf, size_t nelem, size_t size, FILE *in, int32 magic)
00046 {
00047 DEBUG_ENTRY( "do_restore_state()" );
00048
00049 int32 help = 0;
00050 size_t help2 = 0;
00051 bool lgErr = ( fread( &help, sizeof(int32), 1, in ) != 1 );
00052
00053
00054 lgErr = lgErr || ( help != magic );
00055 lgErr = lgErr || ( fread( &help, sizeof(int32), 1, in ) != 1 );
00056
00057 lgErr = lgErr || ( help != (int32)sizeof(size_t) );
00058 lgErr = lgErr || ( fread( &help2, sizeof(size_t), 1, in ) != 1 );
00059
00060 lgErr = lgErr || ( help2 != size );
00061 lgErr = lgErr || ( fread( buf, size, nelem, in ) != nelem );
00062 if( lgErr )
00063 {
00064 fprintf( ioQQQ, " Error while restoring state!\n" );
00065 cdEXIT(EXIT_FAILURE);
00066 }
00067 }