diff --git a/Event/DAQEvent/src/RawEvent.cpp b/Event/DAQEvent/src/RawEvent.cpp index c084dbe8d5c024956d6275b540d733ab4b8ddc72..1c9254e7955ab0bc6d4cdfbefbb23994442bfbc6 100644 --- a/Event/DAQEvent/src/RawEvent.cpp +++ b/Event/DAQEvent/src/RawEvent.cpp @@ -10,7 +10,8 @@ \*****************************************************************************/ #include "Event/RawEvent.h" #include <cassert> -#include <cstring> // for memcpy with gcc 4.3 +#include <cstring> +#include <stdexcept> namespace { LHCb::RawBank* allocateBank( size_t len ) { @@ -26,8 +27,11 @@ LHCb::RawEvent::MapView::MapView( LHCb::RawEvent const& raw ) : m_banks{ raw.get std::array<uint16_t, RawBank::BankType::LastType> counts{}; // zero-initialize std::for_each( raw.m_banks.begin(), raw.m_banks.end(), [&counts]( const Bank& b ) { auto ptr = reinterpret_cast<const RawBank*>( b.buffer() ); - assert( ptr != nullptr ); - if ( auto type = ptr->type(); type < RawBank::BankType::LastType ) ++counts[type]; + if ( ptr ) { + if ( auto type = ptr->type(); type < RawBank::BankType::LastType ) { ++counts[type]; } + } else { + throw std::runtime_error( "RawEvent::MapView: Null bank pointer in RawEvent !" ); + } } ); m_indices.front() = 0; std::partial_sum( counts.begin(), counts.end(), std::next( m_indices.begin() ) ); @@ -46,7 +50,7 @@ LHCb::RawEvent::MapView::MapView( LHCb::RawEvent const& raw ) : m_banks{ raw.get // Default Destructor LHCb::RawEvent::~RawEvent() { for ( Bank& b : m_banks ) { - if ( b.ownsMemory() ) delete[] b.buffer(); + if ( b.ownsMemory() ) { delete[] b.buffer(); } } } @@ -62,7 +66,7 @@ LHCb::RawBank* LHCb::RawEvent::createBank( int srcID, LHCb::RawBank::BankType ty const void* data ) { RawBank* bank = allocateBank( len ); bank->setMagic().setType( typ ).setVersion( vsn ).setSourceID( srcID ).setSize( len ); - if ( data ) std::memcpy( bank->data(), data, len ); + if ( data ) { std::memcpy( bank->data(), data, len ); } return bank; } @@ -92,7 +96,7 @@ bool LHCb::RawEvent::removeBank( const RawBank* bank ) { if ( i == m_banks.end() ) return false; // The bank is owned by RawEvent: delete the allocated buffer // to prevent memory leak when reading data from a ROOT file... - if ( i->ownsMemory() ) delete[] i->buffer(); + if ( i->ownsMemory() ) { delete[] i->buffer(); } m_banks.erase( i ); // brute force solution: invalidate map.. TODO: just modify instead of rebuilding later from scratch m_map.reset();