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 <System/cmtkCompressedStream.h>
00034
00035 #include <lzmadec.h>
00036
00037 #include <System/cmtkConsole.h>
00038 #include <System/cmtkExitException.h>
00039
00040 namespace
00041 cmtk
00042 {
00043
00046
00047 CompressedStream::LZMA::LZMA( const char* filename )
00048 {
00049 this->m_File = lzmadec_open( filename );
00050 if ( !this->m_File )
00051 {
00052 StdErr << "ERROR: lzmadec_open() failed for file '" << filename << "'\n";
00053 throw ExitException( 1 );
00054 }
00055 }
00056
00057 void
00058 CompressedStream::LZMA::Close()
00059 {
00060 lzmadec_close( this->m_File );
00061 }
00062
00063 size_t
00064 CompressedStream::LZMA::Read ( void *data, size_t size, size_t count )
00065 {
00066 const size_t result = lzmadec_read( this->m_File, reinterpret_cast<uint8_t*>( data ), size * count );
00067 this->m_BytesRead += result;
00068 return result / size;
00069 }
00070
00071 bool
00072 CompressedStream::LZMA::Get ( char &c)
00073 {
00074 const int data = lzmadec_getc( this->m_File );
00075 if ( data != EOF )
00076 {
00077 c=(char) data;
00078 ++this->m_BytesRead;
00079 return true;
00080 }
00081
00082 return false;
00083 }
00084
00085 void
00086 CompressedStream::LZMA::Rewind ()
00087 {
00088 lzmadec_rewind( this->m_File );
00089 this->CompressedStream::ReaderBase::Rewind();
00090 }
00091
00092 int
00093 CompressedStream::LZMA::Tell () const
00094 {
00095 return lzmadec_tell( this->m_File );
00096 }
00097
00098 bool
00099 CompressedStream::LZMA::Feof () const
00100 {
00101 return lzmadec_eof( this->m_File );
00102 }
00103
00104 }