File indexing completed on 2023-10-25 09:53:46
0001 #ifndef IOPool_Streamer_StreamerInputModule_h
0002 #define IOPool_Streamer_StreamerInputModule_h
0003
0004 #include "IOPool/Streamer/interface/StreamerInputSource.h"
0005
0006 #include "FWCore/Utilities/interface/DebugMacros.h"
0007 #include "FWCore/Utilities/interface/propagate_const.h"
0008
0009 #include <memory>
0010 #include <string>
0011 #include <fstream>
0012 #include <vector>
0013 #include <utility>
0014 #include <iostream>
0015 #include <algorithm>
0016 #include <iterator>
0017
0018 namespace edm {
0019 template <typename Producer>
0020 class StreamerInputModule : public StreamerInputSource {
0021
0022
0023
0024
0025
0026
0027 public:
0028 explicit StreamerInputModule(ParameterSet const& pset, InputSourceDescription const& desc);
0029 ~StreamerInputModule() override;
0030
0031 private:
0032 void genuineCloseFile() override {
0033 if (pr_.get() != nullptr)
0034 pr_->closeFile();
0035 }
0036
0037 void genuineReadFile() override {
0038 if (isFirstFile_) {
0039 isFirstFile_ = false;
0040 return;
0041 }
0042
0043 InitMsgView const* header = pr_->getHeader();
0044 deserializeAndMergeWithRegistry(*header);
0045 }
0046
0047 Next checkNext() override;
0048
0049 edm::propagate_const<std::unique_ptr<Producer>> pr_;
0050 bool isFirstFile_ = true;
0051 };
0052
0053 template <typename Producer>
0054 StreamerInputModule<Producer>::~StreamerInputModule() {}
0055
0056 template <typename Producer>
0057 StreamerInputModule<Producer>::StreamerInputModule(ParameterSet const& pset, InputSourceDescription const& desc)
0058 : StreamerInputSource(pset, desc),
0059
0060 pr_(new Producer(pset)) {
0061
0062 InitMsgView const* header = pr_->getHeader();
0063 deserializeAndMergeWithRegistry(*header);
0064 }
0065
0066 template <typename Producer>
0067 StreamerInputSource::Next StreamerInputModule<Producer>::checkNext() {
0068 EventMsgView const* eview = pr_->getNextEvent();
0069
0070 if (pr_->newHeader()) {
0071 FDEBUG(6) << "A new file has been opened and we must compare Headers here !!" << std::endl;
0072 return Next::kFile;
0073 }
0074 if (eview == nullptr) {
0075 return Next::kStop;
0076 }
0077 deserializeEvent(*eview);
0078 return Next::kEvent;
0079 }
0080
0081 }
0082
0083 #endif