GZIPOutputStreamBuffer.cc

Go to the documentation of this file.
00001 // Copyright FreeHEP, 2005.
00002 
00003 #include "cheprep/GZIPOutputStreamBuffer.h"
00004 
00009 namespace cheprep {
00010 
00011     using namespace std;
00012 
00013     GZIPOutputStreamBuffer::GZIPOutputStreamBuffer( streambuf *aBuffer)
00014         : DeflateOutputStreamBuffer(aBuffer),
00015           open(false) {
00016             
00017         init(true);
00018     }
00019     
00020     void GZIPOutputStreamBuffer::setFilename( const string &name ) {
00021         filename = name ;
00022     }
00023     
00024     void GZIPOutputStreamBuffer::setComment( const string &c ) {
00025         comment = c ;
00026     }
00027     
00028     void GZIPOutputStreamBuffer::close() {
00029         if (!open) return;
00030 
00031         finish();         
00032         writeTrailer();
00033       
00034         open = false ;
00035     }
00036     
00037     GZIPOutputStreamBuffer::~GZIPOutputStreamBuffer() {
00038         close() ;
00039     }
00040     
00041     int GZIPOutputStreamBuffer::overflow( int c ) {
00042         if (!open) {
00043             writeHeader();
00044             open = true;
00045         }
00046         return DeflateOutputStreamBuffer::overflow( c ) ;
00047     }
00048         
00049     void GZIPOutputStreamBuffer::writeHeader() {
00050         unsigned char flag = 0x00;
00051         flag |= (filename == "") ? 0x00 : 0x08;
00052         flag |= (comment  == "") ? 0x00 : 0x10;
00053     
00054         putUB(0x1f);  // Magic #
00055         putUB(0x8b);  // Magic #        
00056         putUB(0x08);  // Deflater.DEFLATED
00057         putUB(flag);  // FLG
00058         putUI(0x00000000);  // MTIME
00059         putUB(0x00);  // XFLG
00060         putUB(0x00);  // OS
00061             
00062         if (filename != "") {
00063             putS(filename); // Filename
00064             putUB(0x00);
00065         }
00066         
00067         if (comment != "") {
00068             putS(comment); // Comment
00069             putUB(0x00);
00070         }
00071     }
00072     
00073     void GZIPOutputStreamBuffer::writeTrailer() {
00074         putUI(getCRC());
00075         putUI(getSize());
00076     }
00077     
00078 } // cheprep

Generated on Mon May 27 17:50:29 2013 for Geant4 by  doxygen 1.4.7