Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:32

0001 #include "bz2buffer.h"
0002 #include "oncsBuffer.h"
0003 #include <bzlib.h>
0004 
0005 
0006 // the constructor first ----------------
0007 bz2buffer::bz2buffer (PHDWORD *array , const int length )
0008 
0009 {
0010 
0011   is_good =1;
0012   bufferarray=0;
0013   theBuffer=0;
0014 
0015   unsigned int bytes; 
0016   unsigned int outputlength_in_bytes;
0017   if (array[1] == BZ2BUFFERMARKER)
0018     {
0019       bytes = array[0]-4*BUFFERHEADERLENGTH;
0020       outputlength_in_bytes = array[3];
0021     }
0022   else if ( u4swap(array[1]) == BZ2BUFFERMARKER )
0023     {
0024       bytes = i4swap(array[0])-16;
0025       outputlength_in_bytes = i4swap(array[3]);
0026     }
0027   
0028   else
0029     {
0030       COUT << __FILE__ << " " << __LINE__ << " wrong buffer marker = " << std::hex << array[1] << std::dec << std::endl;
0031       is_good = 0;
0032       return;
0033     }
0034   
0035   
0036   unsigned int outputlength =  (outputlength_in_bytes+3)/4;
0037   bufferarray = new PHDWORD[outputlength];
0038 
0039   unsigned int olen = 4*outputlength;
0040     
0041   int status = BZ2_bzBuffToBuffDecompress ( (char *) bufferarray, &olen,
0042                    ( char *) &array[4], bytes, 0, 0 );
0043 
0044   if ( status || olen != outputlength_in_bytes)
0045       {
0046         COUT << __FILE__ << "  " << __LINE__ << " wrong-sized buffer:  " << olen << " should be " <<  outputlength_in_bytes << std::endl;
0047     is_good = 0;
0048     //      delete [] bufferarray;
0049     //  bufferarray = 0;
0050     //  return;
0051      }
0052     if ( bufferarray[1]== BUFFERMARKER || buffer::u4swap(bufferarray[1])== BUFFERMARKER )
0053       {
0054     theBuffer = new prdfBuffer(bufferarray, outputlength);
0055       }
0056     else if ( bufferarray[1]== ONCSBUFFERMARKER || buffer::u4swap(bufferarray[1])== ONCSBUFFERMARKER )
0057       {
0058     theBuffer = new oncsBuffer(bufferarray, outputlength);
0059       }
0060     else
0061       {
0062     theBuffer = 0;
0063       }
0064 }
0065 
0066 // ---------------------------------------------------------
0067 Event * bz2buffer::getEvent()
0068 {
0069   if ( theBuffer) return theBuffer->getEvent();
0070   return 0;
0071 }
0072 
0073 // ---------------------------------------------------------
0074 int bz2buffer::getBufferSequence() const
0075 {
0076   if ( !theBuffer) return 0;
0077   return theBuffer->getBufferSequence();
0078 }
0079 
0080 // ---------------------------------------------------------
0081 
0082 bz2buffer::~bz2buffer()
0083 {
0084   if ( theBuffer) delete theBuffer;
0085   if ( bufferarray) delete [] bufferarray;
0086 }
0087 
0088