CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
List of all members | Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Types | Private Attributes | Friends
edm::helper::IndexRangeAssociation Class Reference

#include <MultiAssociation.h>

Classes

class  FastFiller
 
struct  IDComparator
 

Public Types

typedef std::pair< unsigned
int, unsigned int > 
range
 

Public Member Functions

bool contains (ProductID id) const
 True if this IndexRangeAssociation has info for this product id. More...
 
bool empty () const
 True if it's empty (no keys) More...
 
range get (const edm::ProductID &id, unsigned int t) const
 
 IndexRangeAssociation ()
 
template<typename RefKey >
range operator[] (const RefKey &r) const
 
unsigned int size () const
 Size of this collection (number of keys) More...
 
void swap (IndexRangeAssociation &other)
 

Static Public Member Functions

static void throwUnexpectedProductID (ProductID found, ProductID expected, const char *where)
 

Private Types

typedef std::pair
< edm::ProductID, unsigned int > 
id_off_pair
 
typedef std::vector< id_off_pairid_offset_vector
 
typedef std::vector< int > offset_vector
 

Private Attributes

id_offset_vector id_offsets_
 
bool isFilling_
 
offset_vector ref_offsets_
 

Friends

class FastFiller
 

Detailed Description

Base class to map to items one a range within a target collection. All items in a target collection must be mapped to one and only one key. The target collection will normally be a RefVector (also PtrVector and std::vector could work) To be used by MultiAssociation. Any other usage beyond MultiAssociation is not supported. This class holds:

Definition at line 71 of file MultiAssociation.h.

Member Typedef Documentation

typedef std::pair<edm::ProductID, unsigned int> edm::helper::IndexRangeAssociation::id_off_pair
private

Definition at line 135 of file MultiAssociation.h.

Definition at line 136 of file MultiAssociation.h.

typedef std::vector<int> edm::helper::IndexRangeAssociation::offset_vector
private

Definition at line 137 of file MultiAssociation.h.

typedef std::pair<unsigned int, unsigned int> edm::helper::IndexRangeAssociation::range

Definition at line 73 of file MultiAssociation.h.

Constructor & Destructor Documentation

edm::helper::IndexRangeAssociation::IndexRangeAssociation ( )
inline

Definition at line 75 of file MultiAssociation.h.

Member Function Documentation

bool IndexRangeAssociation::contains ( ProductID  id) const

True if this IndexRangeAssociation has info for this product id.

Definition at line 29 of file MultiAssociation.cc.

References gpuClustering::id, id_offsets_, and cuda_std::lower_bound().

Referenced by LumiList.LumiList::__contains__(), and edm::MultiAssociation< C >::contains().

29  {
30  typedef IndexRangeAssociation::id_offset_vector::const_iterator iter;
31  iter pos = std::lower_bound(id_offsets_.begin(), id_offsets_.end(), id, IDComparator());
32  return (pos != id_offsets_.end()) && (pos->first == id);
33 }
uint16_t *__restrict__ id
__host__ __device__ constexpr RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
bool edm::helper::IndexRangeAssociation::empty ( ) const
inline

True if it's empty (no keys)

Definition at line 95 of file MultiAssociation.h.

References ref_offsets_.

Referenced by edm::MultiAssociation< C >::empty().

95 { return ref_offsets_.empty(); }
IndexRangeAssociation::range IndexRangeAssociation::get ( const edm::ProductID id,
unsigned int  t 
) const

Get a range of indices for this product id and key (non-template version) And end value of -1 means 'until the end of the other collection, AFAICT'

Definition at line 9 of file MultiAssociation.cc.

References Exception, gpuClustering::id, id_offsets_, submitPVResolutionJobs::key, cuda_std::lower_bound(), ref_offsets_, and edm::second().

Referenced by Options.Options::__getitem__(), betterConfigParser.BetterConfigParser::__updateDict(), submitPVValidationJobs.BetterConfigParser::__updateDict(), rrapi.RRApi::columns(), util.rrapi.RRApi::columns(), rrapi.RRApi::count(), util.rrapi.RRApi::count(), rrapi.RRApi::data(), util.rrapi.RRApi::data(), edm::MultiAssociation< C >::get(), betterConfigParser.BetterConfigParser::getCompares(), betterConfigParser.BetterConfigParser::getGeneral(), betterConfigParser.BetterConfigParser::getResultingSection(), submitPVValidationJobs.BetterConfigParser::getResultingSection(), util.rrapi.RRApi::report(), rrapi.RRApi::report(), util.rrapi.RRApi::reports(), rrapi.RRApi::reports(), rrapi.RRApi::tables(), util.rrapi.RRApi::tables(), util.rrapi.RRApi::tags(), rrapi.RRApi::tags(), rrapi.RRApi::templates(), util.rrapi.RRApi::templates(), rrapi.RRApi::workspaces(), and util.rrapi.RRApi::workspaces().

9  {
10  typedef IndexRangeAssociation::id_offset_vector::const_iterator iter;
11  iter pos = std::lower_bound(id_offsets_.begin(), id_offsets_.end(), id, IDComparator());
12  if ((pos == id_offsets_.end()) || (pos->first != id)) {
13  throw cms::Exception("Bad Key") << "Product ID " << id << " not found in this IndexRangeAssociation\n";
14  }
15  // === Do we want this check ? I would say yes, even if it costs some extra CPU cycles
16  if ((pos + 1 != id_offsets_.end()) && (pos->second + key >= (pos + 1)->second)) {
17  throw cms::Exception("Bad Offset") << "Key " << key << " goes beyond bounds " << ((pos + 1)->second - pos->second)
18  << " of this key collection within IndexRangeAssociation\n";
19  }
20  // === End check
21  offset_vector::const_iterator offs = ref_offsets_.begin() + pos->second + key;
22  if (offs >= ref_offsets_.end() - 1) {
23  throw cms::Exception("Bad Offset") << "Key " << key << " goes beyond bounds " << ref_offsets_.size() - 1
24  << " of this IndexRangeAssociation\n";
25  }
26  return range(*offs, *(offs + 1));
27 }
uint16_t *__restrict__ id
U second(std::pair< T, U > const &p)
tuple key
prepare the HTCondor submission files and eventually submit them
std::pair< unsigned int, unsigned int > range
__host__ __device__ constexpr RandomIt lower_bound(RandomIt first, RandomIt last, const T &value, Compare comp={})
template<typename RefKey >
range edm::helper::IndexRangeAssociation::operator[] ( const RefKey &  r) const
inline

Get a range of indices for this key. RefKey can be edm::Ref, edm::Ptr, edm::RefToBase And end value of -1 means 'until the end of the other collection, AFAICT'

Definition at line 80 of file MultiAssociation.h.

80  {
81  return get(r.id(), r.key());
82  }
unsigned int edm::helper::IndexRangeAssociation::size ( void  ) const
inline
void IndexRangeAssociation::swap ( IndexRangeAssociation other)

Definition at line 35 of file MultiAssociation.cc.

References Exception, id_offsets_, isFilling_, and ref_offsets_.

Referenced by edm::helper::swap(), and edm::MultiAssociation< C >::swap().

35  {
36  if (isFilling_ || other.isFilling_)
37  throw cms::Exception("Busy") << "Can't swap an IndexRangeAssociation while it's being filled!\n";
38  id_offsets_.swap(other.id_offsets_);
39  ref_offsets_.swap(other.ref_offsets_);
40 }
void IndexRangeAssociation::throwUnexpectedProductID ( ProductID  found,
ProductID  expected,
const char *  where 
)
static

Definition at line 119 of file MultiAssociation.cc.

References Exception.

Referenced by edm::helper::IndexRangeAssociation::FastFiller::insert(), edm::MultiAssociation< C >::LazyFiller::setValues(), and edm::MultiAssociation< C >::LazyFiller::swapValues().

119  {
120  throw cms::Exception("Unexpected ProductID")
121  << where << ": found product id " << found << ", while expecting " << expected << ".\n"
122  << "Make sure you're not mismatching references from different collections.\n";
123 }

Friends And Related Function Documentation

friend class FastFiller
friend

Definition at line 128 of file MultiAssociation.h.

Member Data Documentation

id_offset_vector edm::helper::IndexRangeAssociation::id_offsets_
private
bool edm::helper::IndexRangeAssociation::isFilling_
private
offset_vector edm::helper::IndexRangeAssociation::ref_offsets_
private