Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-05-31 04:19:42

0001 #include "IOPool/Streamer/interface/StreamerOutputFile.h"
0002 #include "FWCore/Utilities/interface/Exception.h"
0003 
0004 namespace edm::streamer {
0005   StreamerOutputFile::~StreamerOutputFile() {}
0006 
0007   StreamerOutputFile::StreamerOutputFile(const std::string& name, uint32 padding)
0008       : streamerfile_(std::make_shared<edm::streamer::OutputFile>(name, padding)) {
0009     streamerfile_->set_do_adler(true);
0010   }
0011 
0012   uint64 StreamerOutputFile::write(const EventMsgBuilder& ineview) {
0013     EventMsgView tmpView(ineview.startAddress());
0014     return write(tmpView);
0015   }
0016 
0017   uint64 StreamerOutputFile::write(const EventMsgView& ineview) {
0018     /** Offset where current event starts */
0019     uint64 offset_to_return = streamerfile_->current_offset();
0020 
0021     writeEventHeader(ineview);
0022     bool ret = streamerfile_->write((const char*)ineview.eventData(), ineview.size() - ineview.headerSize(), true);
0023     if (ret) {
0024       throw cms::Exception("OutputFile", "write(EventMsgView)")
0025           << "Error writing streamer event data to " << streamerfile_->fileName() << ".  Possibly the output disk "
0026           << "is full?" << std::endl;
0027     }
0028     return offset_to_return;
0029   }
0030 
0031   uint64 StreamerOutputFile::writeEventFragment(uint32 fragIndex,
0032                                                 uint32 fragCount,
0033                                                 const char* dataPtr,
0034                                                 uint32 dataSize) {
0035     /** Offset where current event starts */
0036     uint64 offset_to_return = streamerfile_->current_offset();
0037 
0038     bool ret = streamerfile_->write(dataPtr, dataSize);
0039     if (ret) {
0040       throw cms::Exception("OutputFile", "writeEventFragment()")
0041           << "Error writing streamer event data to " << streamerfile_->fileName() << ".  Possibly the output disk "
0042           << "is full?" << std::endl;
0043     }
0044     return offset_to_return;
0045   }
0046 
0047   void StreamerOutputFile::writeEventHeader(const EventMsgView& ineview) {
0048     bool ret = streamerfile_->write((const char*)ineview.startAddress(), ineview.headerSize());
0049     if (ret) {
0050       throw cms::Exception("OutputFile", "writeEventHeader")
0051           << "Error writing streamer event data to " << streamerfile_->fileName() << ".  Possibly the output disk "
0052           << "is full?" << std::endl;
0053     }
0054   }
0055 
0056   void StreamerOutputFile::write(const InitMsgBuilder& inview) {
0057     InitMsgView tmpView(inview.startAddress());
0058     return write(tmpView);
0059   }
0060 
0061   void StreamerOutputFile::write(const InitMsgView& inview) {
0062     writeStart(inview);
0063     bool ret = streamerfile_->write((const char*)inview.descData(), inview.size() - inview.headerSize(), true);
0064     if (ret) {
0065       throw cms::Exception("OutputFile", "write(InitMsgView)")
0066           << "Error writing streamer header data to " << streamerfile_->fileName() << ".  Possibly the output disk "
0067           << "is full?" << std::endl;
0068     }
0069   }
0070 
0071   void StreamerOutputFile::writeInitFragment(uint32 fragIndex, uint32 fragCount, const char* dataPtr, uint32 dataSize) {
0072     bool ret = streamerfile_->write((const char*)dataPtr, dataSize);
0073     if (ret) {
0074       throw cms::Exception("OutputFile", "writeInitFragment()")
0075           << "Error writing streamer header data to " << streamerfile_->fileName() << ".  Possibly the output disk "
0076           << "is full?" << std::endl;
0077     }
0078   }
0079 
0080   void StreamerOutputFile::writeStart(const InitMsgView& inview) {
0081     bool ret = streamerfile_->write((const char*)inview.startAddress(), inview.headerSize());
0082     if (ret) {
0083       throw cms::Exception("OutputFile", "writeStart")
0084           << "Error writing streamer header data to " << streamerfile_->fileName() << ".  Possibly the output disk "
0085           << "is full?" << std::endl;
0086     }
0087   }
0088 }  // namespace edm::streamer