CMS 3D CMS Logo

edm::FileIndex Class Reference

#include <DataFormats/Provenance/interface/FileIndex.h>

List of all members.

Public Types

typedef std::vector< Element >
::const_iterator 
const_iterator
typedef long long EntryNumber_t
enum  EntryType { kRun, kLumi, kEvent, kEnd }
enum  SortState { kNotSorted, kSorted_Run_Lumi_Event, kSorted_Run_Lumi_EventEntry }

Public Member Functions

void addEntry (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, EntryNumber_t entry)
bool allEventsInEntryOrder () const
const_iterator begin () const
bool containsEvent (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, bool exact) const
bool containsLumi (RunNumber_t run, LuminosityBlockNumber_t lumi, bool exact) const
bool containsRun (RunNumber_t run, bool exact) const
bool empty () const
const_iterator end () const
bool eventsUniqueAndOrdered () const
 FileIndex ()
const_iterator findEventPosition (RunNumber_t run, LuminosityBlockNumber_t lumi, EventNumber_t event, bool exact) const
const_iterator findLumiOrRunPosition (RunNumber_t run, LuminosityBlockNumber_t lumi) const
const_iterator findLumiPosition (RunNumber_t run, LuminosityBlockNumber_t lumi, bool exact) const
const_iterator findPosition (RunNumber_t run, LuminosityBlockNumber_t lumi=0U, EventNumber_t event=0U) const
const_iterator findRunPosition (RunNumber_t run, bool exact) const
void setDefaultTransients () const
std::vector< Element >::size_type size () const
void sortBy_Run_Lumi_Event ()
void sortBy_Run_Lumi_EventEntry ()
 ~FileIndex ()

Private Member Functions

boolallInEntryOrder () const
boolresultCached () const
SortStatesortState () const

Private Attributes

std::vector< Elemententries_
Transient< Transientstransients_

Classes

class  Element
struct  Transients


Detailed Description

Definition at line 23 of file FileIndex.h.


Member Typedef Documentation

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.


Member Enumeration Documentation

enum edm::FileIndex::EntryType

Enumerator:
kRun 
kLumi 
kEvent 
kEnd 

Definition at line 33 of file FileIndex.h.

00033 {kRun, kLumi, kEvent, kEnd};

enum edm::FileIndex::SortState

Enumerator:
kNotSorted 
kSorted_Run_Lumi_Event 
kSorted_Run_Lumi_EventEntry 

Definition at line 103 of file FileIndex.h.


Constructor & Destructor Documentation

edm::FileIndex::FileIndex (  ) 

Definition at line 10 of file FileIndex.cc.

00010 : entries_(), transients_() {}

edm::FileIndex::~FileIndex (  )  [inline]

Definition at line 29 of file FileIndex.h.

00029 {}


Member Function Documentation

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       };

std::vector<Element>::size_type edm::FileIndex::size ( void   )  const [inline]

Definition at line 95 of file FileIndex.h.

References entries_.

00095 {return entries_.size();}

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_;}


Member Data Documentation

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().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:41:01 2009 for CMSSW by  doxygen 1.5.4