Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "cmtkCompressedStream.h"
00034
00035 #include <bzlib.h>
00036
00037 #include <System/cmtkConsole.h>
00038 #include <System/cmtkExitException.h>
00039
00040 namespace
00041 cmtk
00042 {
00043
00046
00047 CompressedStream::BZip2::BZip2( const char* filename )
00048 {
00049 this->m_BzFile = BZ2_bzopen( filename, CMTK_FILE_MODE );
00050 if ( !this->m_BzFile )
00051 {
00052 StdErr << "ERROR: CompressedStream::BZip2 could not open file '" << filename << "'\n";
00053 throw ExitException( 1 );
00054 }
00055 }
00056
00057 void
00058 CompressedStream::BZip2::Close()
00059 {
00060 BZ2_bzclose( this->m_BzFile );
00061 }
00062
00063 void
00064 CompressedStream::BZip2::Rewind()
00065 {
00066 StdErr << "CompressedStream::BZip2::Rewind() is not implemented\n";
00067 throw ExitException( 1 );
00068 }
00069
00070 size_t
00071 CompressedStream::BZip2::Read ( void *data, size_t size, size_t count )
00072 {
00073 const size_t bytesRead = BZ2_bzRead( &this->m_BzError, this->m_BzFile, data, size * count );
00074
00075 if ( this->m_BzError < 0 )
00076 {
00077 StdErr << "BZ2_bzRead() returned error " << this->m_BzError << "\n";
00078 throw( ExitException( 1 ) );
00079 }
00080
00081 this->m_BytesRead += bytesRead;
00082 return bytesRead / size;
00083 }
00084
00085 bool
00086 CompressedStream::BZip2::Get ( char &c)
00087 {
00088 if ( this->Feof() || !this->Read( &c, sizeof(char), 1 ) )
00089 return false;
00090
00091 return true;
00092 }
00093
00094 int
00095 CompressedStream::BZip2::Tell () const
00096 {
00097 return this->m_BytesRead;
00098 }
00099
00100 bool
00101 CompressedStream::BZip2::Feof () const
00102 {
00103 return this->m_BzError == BZ_STREAM_END;
00104 }
00105
00106 }