#include <DataFormats/Provenance/interface/FileIndex.h>
Definition at line 23 of file FileIndex.h.
typedef std::vector<Element>::const_iterator edm::FileIndex::const_iterator |
Definition at line 56 of file FileIndex.h.
typedef long long edm::FileIndex::EntryNumber_t |
Definition at line 26 of file FileIndex.h.
edm::FileIndex::FileIndex | ( | ) |
edm::FileIndex::~FileIndex | ( | ) | [inline] |
void edm::FileIndex::addEntry | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi, | |||
EventNumber_t | event, | |||
EntryNumber_t | entry | |||
) |
Definition at line 22 of file FileIndex.cc.
References entries_, kNotSorted, resultCached(), and sortState().
Referenced by edm::RootFile::fillFileIndex(), edm::RootOutputFile::writeLuminosityBlock(), edm::RootOutputFile::writeOne(), and edm::RootOutputFile::writeRun().
00022 { 00023 entries_.push_back(FileIndex::Element(run, lumi, event, entry)); 00024 resultCached() = false; 00025 sortState() = kNotSorted; 00026 }
bool edm::FileIndex::allEventsInEntryOrder | ( | ) | const |
Definition at line 40 of file FileIndex.cc.
References allInEntryOrder(), entries_, edm::FileIndex::Element::invalidEntry, it, kEvent, and resultCached().
Referenced by edm::RootFile::setIfFastClonable().
00040 { 00041 if (!resultCached()) { 00042 resultCached() = true; 00043 EntryNumber_t maxEntry = Element::invalidEntry; 00044 for (std::vector<FileIndex::Element>::const_iterator it = entries_.begin(), itEnd = entries_.end(); it != itEnd; ++it) { 00045 if (it->getEntryType() == kEvent) { 00046 if (it->entry_ < maxEntry) { 00047 allInEntryOrder() = false; 00048 return false; 00049 } 00050 maxEntry = it->entry_; 00051 } 00052 } 00053 allInEntryOrder() = true; 00054 return true; 00055 } 00056 return allInEntryOrder(); 00057 }
bool& edm::FileIndex::allInEntryOrder | ( | ) | const [inline, private] |
Definition at line 118 of file FileIndex.h.
References transients_.
Referenced by allEventsInEntryOrder().
00118 {return transients_.get().allInEntryOrder_;}
const_iterator edm::FileIndex::begin | ( | ) | const [inline] |
Definition at line 91 of file FileIndex.h.
References entries_.
Referenced by eventsUniqueAndOrdered(), edm::operator<<(), and edm::RootFile::RootFile().
00091 {return entries_.begin();}
bool edm::FileIndex::containsEvent | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi, | |||
EventNumber_t | event, | |||
bool | exact | |||
) | const [inline] |
Definition at line 77 of file FileIndex.h.
References entries_, and findEventPosition().
00077 { 00078 return findEventPosition(run, lumi, event, exact) != entries_.end(); 00079 }
bool edm::FileIndex::containsLumi | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi, | |||
bool | exact | |||
) | const [inline] |
Definition at line 82 of file FileIndex.h.
References entries_, and findLumiPosition().
00082 { 00083 return findLumiPosition(run, lumi, exact) != entries_.end(); 00084 }
bool edm::FileIndex::containsRun | ( | RunNumber_t | run, | |
bool | exact | |||
) | const [inline] |
Definition at line 87 of file FileIndex.h.
References entries_, and findRunPosition().
00087 { 00088 return findRunPosition(run, exact) != entries_.end(); 00089 }
bool edm::FileIndex::empty | ( | ) | const [inline] |
Definition at line 97 of file FileIndex.h.
References entries_.
Referenced by edm::RootFile::validateFile().
00097 {return entries_.empty();}
const_iterator edm::FileIndex::end | ( | ) | const [inline] |
Definition at line 93 of file FileIndex.h.
References entries_.
Referenced by eventsUniqueAndOrdered(), edm::operator<<(), and edm::RootFile::RootFile().
00093 {return entries_.end();}
bool edm::FileIndex::eventsUniqueAndOrdered | ( | ) | const |
Definition at line 59 of file FileIndex.cc.
References begin(), end(), it, and kEvent.
Referenced by edm::DuplicateChecker::init().
00059 { 00060 00061 const_iterator it = begin(); 00062 const_iterator itEnd = end(); 00063 00064 // Set up the iterators to point to first two events 00065 // (In the trivial case where there is zero or one event, 00066 // the set must be unique and ordered) 00067 00068 if (it == itEnd) return true; 00069 00070 // Step to first event 00071 while (it->getEntryType() != kEvent) { 00072 ++it; 00073 if (it == itEnd) return true; 00074 } 00075 const_iterator itPrevious = it; 00076 00077 // Step to second event 00078 ++it; 00079 if (it == itEnd) return true; 00080 while (it->getEntryType() != kEvent) { 00081 ++it; 00082 if (it == itEnd) return true; 00083 } 00084 00085 for ( ; it != itEnd; ++it) { 00086 if (it->getEntryType() == kEvent) { 00087 if (it->run_ < itPrevious->run_) return false; // not ordered 00088 else if (it->run_ == itPrevious->run_) { 00089 if (it->event_ < itPrevious->event_) return false; // not ordered 00090 if (it->event_ == itPrevious->event_) return false; // found duplicate 00091 } 00092 itPrevious = it; 00093 } 00094 } 00095 return true; // finished and found no duplicates 00096 }
FileIndex::const_iterator edm::FileIndex::findEventPosition | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi, | |||
EventNumber_t | event, | |||
bool | exact | |||
) | const |
Definition at line 114 of file FileIndex.cc.
References entries_, findPosition(), it, kEvent, kSorted_Run_Lumi_Event, and sortState().
Referenced by containsEvent(), edm::RootFile::getNextEntryTypeWanted(), and edm::RootFile::setEntryAtEvent().
00114 { 00115 00116 assert(sortState() == kSorted_Run_Lumi_Event); 00117 00118 const_iterator it = findPosition(run, lumi, event); 00119 const_iterator itEnd = entries_.end(); 00120 while (it != itEnd && it->getEntryType() != FileIndex::kEvent) { 00121 ++it; 00122 } 00123 if (it == itEnd) return itEnd; 00124 if (lumi == 0) lumi = it->lumi_; 00125 if (exact && (it->run_ != run || it->lumi_ != lumi || it->event_ != event)) return itEnd; 00126 return it; 00127 }
FileIndex::const_iterator edm::FileIndex::findLumiOrRunPosition | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi | |||
) | const |
Definition at line 170 of file FileIndex.cc.
References entries_, findPosition(), it, kLumi, kNotSorted, kRun, kSorted_Run_Lumi_EventEntry, edm::lower_bound_all(), and sortState().
Referenced by edm::RootFile::getNextEntryTypeWanted().
00170 { 00171 assert(sortState() != kNotSorted); 00172 const_iterator it; 00173 if (sortState() == kSorted_Run_Lumi_EventEntry) { 00174 Element el(run, lumi, 0U); 00175 it = lower_bound_all(entries_, el, Compare_Run_Lumi_EventEntry()); 00176 } 00177 else { 00178 it = findPosition(run, lumi, 0U); 00179 } 00180 const_iterator itEnd = entries_.end(); 00181 while (it != itEnd && it->getEntryType() != FileIndex::kLumi && it->getEntryType() != FileIndex::kRun) { 00182 ++it; 00183 } 00184 return it; 00185 }
FileIndex::const_iterator edm::FileIndex::findLumiPosition | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi, | |||
bool | exact | |||
) | const |
Definition at line 130 of file FileIndex.cc.
References entries_, findPosition(), it, kLumi, kNotSorted, kSorted_Run_Lumi_EventEntry, edm::lower_bound_all(), and sortState().
Referenced by containsLumi(), edm::RootFile::setEntryAtLumi(), and edm::RootFile::setIfFastClonable().
00130 { 00131 assert(sortState() != kNotSorted); 00132 const_iterator it; 00133 if (sortState() == kSorted_Run_Lumi_EventEntry) { 00134 Element el(run, lumi, 0U); 00135 it = lower_bound_all(entries_, el, Compare_Run_Lumi_EventEntry()); 00136 } 00137 else { 00138 it = findPosition(run, lumi, 0U); 00139 } 00140 const_iterator itEnd = entries_.end(); 00141 while (it != itEnd && it->getEntryType() != FileIndex::kLumi) { 00142 ++it; 00143 } 00144 if (it == itEnd) return itEnd; 00145 if (exact && (it->run_ != run || it->lumi_ != lumi)) return itEnd; 00146 return it; 00147 }
FileIndex::const_iterator edm::FileIndex::findPosition | ( | RunNumber_t | run, | |
LuminosityBlockNumber_t | lumi = 0U , |
|||
EventNumber_t | event = 0U | |||
) | const |
Definition at line 99 of file FileIndex.cc.
References entries_, it, kSorted_Run_Lumi_Event, edm::lower_bound_all(), and sortState().
Referenced by findEventPosition(), findLumiOrRunPosition(), findLumiPosition(), findRunPosition(), and edm::RootFile::getNextEntryTypeWanted().
00099 { 00100 00101 assert(sortState() == kSorted_Run_Lumi_Event); 00102 00103 Element el(run, lumi, event); 00104 const_iterator it = lower_bound_all(entries_, el); 00105 bool lumiMissing = (lumi == 0 && event != 0); 00106 if (lumiMissing) { 00107 const_iterator itEnd = entries_.end(); 00108 while (it->event_ < event && it->run_ <= run && it != itEnd) ++it; 00109 } 00110 return it; 00111 }
FileIndex::const_iterator edm::FileIndex::findRunPosition | ( | RunNumber_t | run, | |
bool | exact | |||
) | const |
Definition at line 150 of file FileIndex.cc.
References entries_, findPosition(), it, kNotSorted, kRun, kSorted_Run_Lumi_EventEntry, edm::lower_bound_all(), and sortState().
Referenced by containsRun(), edm::RootFile::getNextEntryTypeWanted(), and edm::RootFile::setEntryAtRun().
00150 { 00151 assert(sortState() != kNotSorted); 00152 const_iterator it; 00153 if (sortState() == kSorted_Run_Lumi_EventEntry) { 00154 Element el(run, 0U, 0U); 00155 it = lower_bound_all(entries_, el, Compare_Run_Lumi_EventEntry()); 00156 } 00157 else { 00158 it = findPosition(run, 0U, 0U); 00159 } 00160 const_iterator itEnd = entries_.end(); 00161 while (it != itEnd && it->getEntryType() != FileIndex::kRun) { 00162 ++it; 00163 } 00164 if (it == itEnd) return itEnd; 00165 if (exact && (it->run_ != run)) return itEnd; 00166 return it; 00167 }
bool& edm::FileIndex::resultCached | ( | ) | const [inline, private] |
Definition at line 119 of file FileIndex.h.
References transients_.
Referenced by addEntry(), allEventsInEntryOrder(), sortBy_Run_Lumi_Event(), and sortBy_Run_Lumi_EventEntry().
00119 {return transients_.get().resultCached_;}
void edm::FileIndex::setDefaultTransients | ( | ) | const [inline] |
Definition at line 112 of file FileIndex.h.
References transients_.
00112 { 00113 transients_ = Transients(); 00114 };
void edm::FileIndex::sortBy_Run_Lumi_Event | ( | ) |
Definition at line 28 of file FileIndex.cc.
References entries_, kSorted_Run_Lumi_Event, resultCached(), sortState(), and edm::stable_sort_all().
Referenced by edm::RootFile::fillFileIndex(), and edm::RootOutputFile::writeFileIndex().
00028 { 00029 stable_sort_all(entries_); 00030 resultCached() = false; 00031 sortState() = kSorted_Run_Lumi_Event; 00032 }
void edm::FileIndex::sortBy_Run_Lumi_EventEntry | ( | ) |
Definition at line 34 of file FileIndex.cc.
References entries_, kSorted_Run_Lumi_EventEntry, resultCached(), sortState(), and edm::stable_sort_all().
Referenced by edm::RootFile::RootFile().
00034 { 00035 stable_sort_all(entries_, Compare_Run_Lumi_EventEntry()); 00036 resultCached() = false; 00037 sortState() = kSorted_Run_Lumi_EventEntry; 00038 }
SortState& edm::FileIndex::sortState | ( | ) | const [inline, private] |
Definition at line 120 of file FileIndex.h.
References transients_.
Referenced by addEntry(), findEventPosition(), findLumiOrRunPosition(), findLumiPosition(), findPosition(), findRunPosition(), sortBy_Run_Lumi_Event(), and sortBy_Run_Lumi_EventEntry().
00120 {return transients_.get().sortState_;}
std::vector<Element> edm::FileIndex::entries_ [private] |
Definition at line 122 of file FileIndex.h.
Referenced by addEntry(), allEventsInEntryOrder(), begin(), containsEvent(), containsLumi(), containsRun(), empty(), end(), findEventPosition(), findLumiOrRunPosition(), findLumiPosition(), findPosition(), findRunPosition(), size(), sortBy_Run_Lumi_Event(), and sortBy_Run_Lumi_EventEntry().
Transient<Transients> edm::FileIndex::transients_ [mutable, private] |
Definition at line 123 of file FileIndex.h.
Referenced by allInEntryOrder(), resultCached(), setDefaultTransients(), and sortState().