00001 #ifndef DataFormats_Provenance_EventEntryInfo_h
00002 #define DataFormats_Provenance_EventEntryInfo_h
00003
00004
00005
00006
00007
00008
00009
00010 #include <iosfwd>
00011 #include <vector>
00012
00013 #include "boost/shared_ptr.hpp"
00014
00015 #include "DataFormats/Provenance/interface/BranchID.h"
00016 #include "DataFormats/Provenance/interface/EntryDescriptionID.h"
00017 #include "DataFormats/Provenance/interface/ProductID.h"
00018 #include "DataFormats/Provenance/interface/ProductStatus.h"
00019 #include "DataFormats/Provenance/interface/ProvenanceFwd.h"
00020 #include "DataFormats/Provenance/interface/Transient.h"
00021
00022
00023
00024
00025
00026 namespace edm {
00027 class EventEntryInfo {
00028 public:
00029 typedef std::vector<EventEntryInfo> EntryInfoVector;
00030 EventEntryInfo();
00031 explicit EventEntryInfo(BranchID const& bid);
00032 EventEntryInfo(BranchID const& bid,
00033 ProductStatus status,
00034 ProductID const& pid);
00035 EventEntryInfo(BranchID const& bid,
00036 ProductStatus status,
00037 ProductID const& pid,
00038 boost::shared_ptr<EventEntryDescription> edPtr);
00039 EventEntryInfo(BranchID const& bid,
00040 ProductStatus status,
00041 ProductID const& pid,
00042 EntryDescriptionID const& edid);
00043
00044 EventEntryInfo(BranchID const& bid,
00045 ProductStatus status,
00046 ModuleDescriptionID const& mdid,
00047 ProductID const& pid,
00048 std::vector<BranchID> const& parents = std::vector<BranchID>());
00049
00050 EventEntryInfo(BranchID const& bid,
00051 ProductStatus status,
00052 ModuleDescriptionID const& mdid);
00053
00054 ~EventEntryInfo() {}
00055
00056 EventEntryInfo makeEntryInfo() const;
00057
00058 void write(std::ostream& os) const;
00059
00060 BranchID const& branchID() const {return branchID_;}
00061 ProductID const& productID() const {return productID_;}
00062 ProductStatus const& productStatus() const {return productStatus_;}
00063 EntryDescriptionID const& entryDescriptionID() const {return entryDescriptionID_;}
00064 EventEntryDescription const& entryDescription() const;
00065 void setStatus(ProductStatus status) {productStatus_ = status;}
00066 void setPresent();
00067 void setNotPresent();
00068 void setModuleDescriptionID(ModuleDescriptionID const& mdid) {moduleDescriptionID() = mdid;}
00069
00070 ModuleDescriptionID & moduleDescriptionID() const {return transients_.get().moduleDescriptionID_;}
00071
00072 bool & noEntryDescription() const {return transients_.get().noEntryDescription_;}
00073
00074 struct Transients {
00075 Transients();
00076 ModuleDescriptionID moduleDescriptionID_;
00077 boost::shared_ptr<EventEntryDescription> entryDescriptionPtr_;
00078 bool noEntryDescription_;
00079 };
00080
00081 void setDefaultTransients() const {
00082 transients_ = Transients();
00083 };
00084
00085 private:
00086
00087 boost::shared_ptr<EventEntryDescription> & entryDescriptionPtr() const {return transients_.get().entryDescriptionPtr_;}
00088
00089 BranchID branchID_;
00090 ProductID productID_;
00091 ProductStatus productStatus_;
00092 EntryDescriptionID entryDescriptionID_;
00093 mutable Transient<Transients> transients_;
00094 };
00095
00096 inline
00097 bool
00098 operator < (EventEntryInfo const& a, EventEntryInfo const& b) {
00099 return a.branchID() < b.branchID();
00100 }
00101
00102 inline
00103 std::ostream&
00104 operator<<(std::ostream& os, EventEntryInfo const& p) {
00105 p.write(os);
00106 return os;
00107 }
00108
00109
00110 bool operator==(EventEntryInfo const& a, EventEntryInfo const& b);
00111 inline bool operator!=(EventEntryInfo const& a, EventEntryInfo const& b) { return !(a==b); }
00112 typedef std::vector<EventEntryInfo> EventEntryInfoVector;
00113 }
00114 #endif