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
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
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 }