![]() |
![]() |
00001 #include "DataFormats/Provenance/interface/EventEntryDescription.h" 00002 #include "DataFormats/Provenance/interface/ModuleDescriptionRegistry.h" 00003 #include "DataFormats/Provenance/interface/EntryDescriptionRegistry.h" 00004 #include <ostream> 00005 00006 /*---------------------------------------------------------------------- 00007 00008 ----------------------------------------------------------------------*/ 00009 00010 namespace edm { 00011 EventEntryDescription::EventEntryDescription() : 00012 parents_(), 00013 moduleDescriptionID_(), 00014 transients_() 00015 { } 00016 00017 void 00018 EventEntryDescription::init() const { 00019 if (!moduleDescriptionPtr()) { 00020 moduleDescriptionPtr().reset(new ModuleDescription); 00021 bool found = ModuleDescriptionRegistry::instance()->getMapped(moduleDescriptionID_, *moduleDescriptionPtr()); 00022 00023 assert(found); 00024 } 00025 } 00026 00027 EntryDescriptionID 00028 EventEntryDescription::id() const 00029 { 00030 // This implementation is ripe for optimization. 00031 std::ostringstream oss; 00032 oss << moduleDescriptionID_ << ' '; 00033 for (std::vector<BranchID>::const_iterator 00034 i = parents_.begin(), 00035 e = parents_.end(); 00036 i != e; 00037 ++i) 00038 { 00039 oss << *i << ' '; 00040 } 00041 00042 std::string stringrep = oss.str(); 00043 cms::Digest md5alg(stringrep); 00044 return EntryDescriptionID(md5alg.digest().toString()); 00045 } 00046 00047 00048 void 00049 EventEntryDescription::write(std::ostream& os) const { 00050 // This is grossly inadequate, but it is not critical for the 00051 // first pass. 00052 os << "Module Description ID = " << moduleDescriptionID() << '\n'; 00053 } 00054 00055 bool 00056 operator==(EventEntryDescription const& a, EventEntryDescription const& b) { 00057 return 00058 a.parents() == b.parents() 00059 && a.moduleDescriptionID() == b.moduleDescriptionID(); 00060 } 00061 }