cmtkCompressedStreamLZMA.cxx

Go to the documentation of this file.
00001 /*
00002 //
00003 //  Copyright 1997-2009 Torsten Rohlfing
00004 //
00005 //  Copyright 2004-2011 SRI International
00006 //
00007 //  This file is part of the Computational Morphometry Toolkit.
00008 //
00009 //  http://www.nitrc.org/projects/cmtk/
00010 //
00011 //  The Computational Morphometry Toolkit is free software: you can
00012 //  redistribute it and/or modify it under the terms of the GNU General Public
00013 //  License as published by the Free Software Foundation, either version 3 of
00014 //  the License, or (at your option) any later version.
00015 //
00016 //  The Computational Morphometry Toolkit is distributed in the hope that it
00017 //  will be useful, but WITHOUT ANY WARRANTY; without even the implied
00018 //  warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00019 //  GNU General Public License for more details.
00020 //
00021 //  You should have received a copy of the GNU General Public License along
00022 //  with the Computational Morphometry Toolkit.  If not, see
00023 //  <http://www.gnu.org/licenses/>.
00024 //
00025 //  $Revision: 2731 $
00026 //
00027 //  $LastChangedDate: 2011-01-13 16:22:47 -0800 (Thu, 13 Jan 2011) $
00028 //
00029 //  $LastChangedBy: torstenrohlfing $
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 } // namespace cmtk
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines