CMS 3D CMS Logo

EventEntryInfo.h

Go to the documentation of this file.
00001 #ifndef DataFormats_Provenance_EventEntryInfo_h
00002 #define DataFormats_Provenance_EventEntryInfo_h
00003 
00004 /*----------------------------------------------------------------------
00005   
00006 EventEntryInfo: The event dependent portion of the description of a product
00007 and how it came into existence, plus the product identifier and the status.
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   EventEntryInfo
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   // Only the 'salient attributes' are testing in equality comparison.
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

Generated on Tue Jun 9 17:31:33 2009 for CMSSW by  doxygen 1.5.4