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
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
0049
0050
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