BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
SimpleRawReader.cxx
Go to the documentation of this file.
1#include "RawFile/SimpleRawReader.h"
2#include "IRawFile/RawFileExceptions.h"
3#include "RawFile/RawFileUtil.h"
4
5#define DefaultEventBufferSize 1024 * 32
6
7static DataSeparatorRecord _dataSeparatorRecord;
8
9SimpleRawReader::SimpleRawReader( const std::string& fname )
10 : m_bufferSize( DefaultEventBufferSize )
11 , m_buffer( new uint32_t[DefaultEventBufferSize] ) {
12 m_rfs = new raw_ifstream( std::vector<std::string>( 1, fname ) );
13}
14
16 delete[] m_buffer;
17 m_rfs->close();
18 delete m_rfs;
19}
20
21const uint32_t* SimpleRawReader::nextEvent() {
22 ( *m_rfs ) >> _dataSeparatorRecord;
23
24 uint32_t size = _dataSeparatorRecord.getRecord().data_block_size;
25 if ( size > m_bufferSize * 4 )
26 {
27 while ( size > m_bufferSize * 4 ) { m_bufferSize *= 2; }
28 delete[] m_buffer;
29 m_buffer = new uint32_t[m_bufferSize];
30 }
31
32 m_rfs->read( (char*)m_buffer, size );
33 if ( !m_rfs->good() )
34 {
35 // std::cerr << "[RawFile] Failed to read FullEventFragment to buffer" << std::endl;
36 throw BadInputStream( "event_data_block" );
37 }
38
39 return m_buffer;
40}
#define DefaultEventBufferSize
virtual ~SimpleRawReader()
const uint32_t * nextEvent()
SimpleRawReader(const std::string &fname)