CMS 3D CMS Logo

List of all members | Public Types | Static Public Member Functions | Private Types
edm::OneToMany< CKey, CVal, index > Class Template Reference

#include <OneToMany.h>

Public Types

typedef edm::Ref< CVal > data_type
 insert val type More...
 
typedef index index_type
 index type More...
 
typedef edm::Ref< CKey > key_type
 insert key type More...
 
typedef std::map< index_type, map_assocmap_type
 map type More...
 
typedef helpers::KeyVal< KeyRefProd, ValRefProdref_type
 reference set type More...
 
typedef std::vector< const typename CKey::value_type * > transient_key_vector
 transient key vector More...
 
typedef std::map< const typename CKey::value_type *, std::vector< const typename CVal::value_type * > > transient_map_type
 transient map type More...
 
typedef std::vector< std::vector< const typename CVal::value_type * > > transient_val_vector
 transient val vector More...
 
typedef edm::RefVector< CVal > val_type
 values reference collection type More...
 

Static Public Member Functions

static void insert (ref_type &ref, map_type &m, const key_type &k, const data_type &v)
 insert in the map More...
 
static void insert (ref_type &ref, map_type &m, const key_type &k, const val_type &v)
 
static map_type::size_type size (const map_assoc &v)
 size of data_type More...
 
static void sort (map_type &)
 sort More...
 
static transient_key_vector transientKeyVector (const ref_type &ref, const map_type &map)
 fill transient key vector More...
 
static transient_map_type transientMap (const ref_type &ref, const map_type &map)
 fill transient map More...
 
static transient_val_vector transientValVector (const ref_type &ref, const map_type &map)
 fill transient val vector More...
 
static val_type val (const ref_type &ref, const map_assoc &iv)
 return values collection More...
 

Private Types

typedef edm::RefProd< CKey > KeyRefProd
 reference to "key" collection More...
 
typedef std::vector< index > map_assoc
 internal map associated data More...
 
typedef edm::RefProd< CVal > ValRefProd
 reference to "value" collection More...
 

Detailed Description

template<typename CKey, typename CVal, typename index = unsigned int>
class edm::OneToMany< CKey, CVal, index >

Definition at line 12 of file OneToMany.h.

Member Typedef Documentation

◆ data_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef edm::Ref<CVal> edm::OneToMany< CKey, CVal, index >::data_type

insert val type

Definition at line 26 of file OneToMany.h.

◆ index_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef index edm::OneToMany< CKey, CVal, index >::index_type

index type

Definition at line 28 of file OneToMany.h.

◆ key_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef edm::Ref<CKey> edm::OneToMany< CKey, CVal, index >::key_type

insert key type

Definition at line 24 of file OneToMany.h.

◆ KeyRefProd

template<typename CKey, typename CVal, typename index = unsigned int>
typedef edm::RefProd<CKey> edm::OneToMany< CKey, CVal, index >::KeyRefProd
private

reference to "key" collection

Definition at line 14 of file OneToMany.h.

◆ map_assoc

template<typename CKey, typename CVal, typename index = unsigned int>
typedef std::vector<index> edm::OneToMany< CKey, CVal, index >::map_assoc
private

internal map associated data

Definition at line 18 of file OneToMany.h.

◆ map_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef std::map<index_type, map_assoc> edm::OneToMany< CKey, CVal, index >::map_type

map type

Definition at line 30 of file OneToMany.h.

◆ ref_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef helpers::KeyVal<KeyRefProd, ValRefProd> edm::OneToMany< CKey, CVal, index >::ref_type

reference set type

Definition at line 32 of file OneToMany.h.

◆ transient_key_vector

template<typename CKey, typename CVal, typename index = unsigned int>
typedef std::vector<const typename CKey::value_type *> edm::OneToMany< CKey, CVal, index >::transient_key_vector

transient key vector

Definition at line 37 of file OneToMany.h.

◆ transient_map_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef std::map<const typename CKey::value_type *, std::vector<const typename CVal::value_type *> > edm::OneToMany< CKey, CVal, index >::transient_map_type

transient map type

Definition at line 35 of file OneToMany.h.

◆ transient_val_vector

template<typename CKey, typename CVal, typename index = unsigned int>
typedef std::vector<std::vector<const typename CVal::value_type *> > edm::OneToMany< CKey, CVal, index >::transient_val_vector

transient val vector

Definition at line 39 of file OneToMany.h.

◆ val_type

template<typename CKey, typename CVal, typename index = unsigned int>
typedef edm::RefVector<CVal> edm::OneToMany< CKey, CVal, index >::val_type

values reference collection type

Definition at line 22 of file OneToMany.h.

◆ ValRefProd

template<typename CKey, typename CVal, typename index = unsigned int>
typedef edm::RefProd<CVal> edm::OneToMany< CKey, CVal, index >::ValRefProd
private

reference to "value" collection

Definition at line 16 of file OneToMany.h.

Member Function Documentation

◆ insert() [1/2]

template<typename CKey, typename CVal, typename index = unsigned int>
static void edm::OneToMany< CKey, CVal, index >::insert ( ref_type ref,
map_type m,
const key_type k,
const data_type v 
)
inlinestatic

insert in the map

Definition at line 41 of file OneToMany.h.

Referenced by SequenceTypes.Schedule::_replaceIfHeldDirectly(), and edm::OneToMany< std::vector< SimTrack >, std::vector< OmniClusterRef >, unsigned int >::insert().

41  {
42  if (k.isNull() || v.isNull())
43  Exception::throwThis(errors::InvalidReference, "can't insert null references in AssociationMap");
44  if (ref.key.isNull()) {
45  if (k.isTransient() || v.isTransient()) {
47  "can't insert transient references in uninitialized AssociationMap");
48  }
49  //another thread might cause productGetter() to change values
50  EDProductGetter const *getter = ref.key.productGetter();
51  if (getter == nullptr) {
53  "Can't insert into AssociationMap unless it was properly initialized.\n"
54  "The most common fix for this is to add arguments to the call to the\n"
55  "AssociationMap constructor that are valid Handle's to the containers.\n"
56  "If you don't have valid handles or either template parameter to the\n"
57  "AssociationMap is a View, then see the comments in AssociationMap.h.\n"
58  "(note this was a new requirement added in the 7_5_X release series)\n");
59  }
60  ref.key = KeyRefProd(k.id(), getter);
61  ref.val = ValRefProd(v.id(), ref.val.productGetter());
62  }
63  helpers::checkRef(ref.key, k);
64  helpers::checkRef(ref.val, v);
65  index_type ik = index_type(k.key()), iv = index_type(v.key());
66  m[ik].push_back(iv);
67  }
static void throwThis(Code category, char const *message0="", char const *message1="", char const *message2="", char const *message3="", char const *message4="")
Definition: EDMException.cc:86
index index_type
index type
Definition: OneToMany.h:28
edm::RefProd< CKey > KeyRefProd
reference to "key" collection
Definition: OneToMany.h:14
edm::RefProd< CVal > ValRefProd
reference to "value" collection
Definition: OneToMany.h:16
void checkRef(const RP &rp, const R &r)
throw if r hasn&#39;t the same id as rp

◆ insert() [2/2]

template<typename CKey, typename CVal, typename index = unsigned int>
static void edm::OneToMany< CKey, CVal, index >::insert ( ref_type ref,
map_type m,
const key_type k,
const val_type v 
)
inlinestatic

Definition at line 68 of file OneToMany.h.

Referenced by SequenceTypes.Schedule::_replaceIfHeldDirectly().

68  {
69  for (typename val_type::const_iterator i = v.begin(), iEnd = v.end(); i != iEnd; ++i)
70  insert(ref, m, k, *i);
71  }
static void insert(ref_type &ref, map_type &m, const key_type &k, const data_type &v)
insert in the map
Definition: OneToMany.h:41
iterator const_iterator
Definition: RefVector.h:38

◆ size()

template<typename CKey, typename CVal, typename index = unsigned int>
static map_type::size_type edm::OneToMany< CKey, CVal, index >::size ( const map_assoc v)
inlinestatic

size of data_type

Definition at line 80 of file OneToMany.h.

Referenced by ntupleDataFormat._Collection::__iter__(), and ntupleDataFormat._Collection::__len__().

80 { return v.size(); }

◆ sort()

template<typename CKey, typename CVal, typename index = unsigned int>
static void edm::OneToMany< CKey, CVal, index >::sort ( map_type )
inlinestatic

sort

Definition at line 82 of file OneToMany.h.

82 {}

◆ transientKeyVector()

template<typename CKey, typename CVal, typename index = unsigned int>
static transient_key_vector edm::OneToMany< CKey, CVal, index >::transientKeyVector ( const ref_type ref,
const map_type map 
)
inlinestatic

fill transient key vector

Definition at line 103 of file OneToMany.h.

103  {
105  if (!map.empty()) {
106  const CKey &ckey = *ref.key;
107  for (typename map_type::const_iterator i = map.begin(); i != map.end(); ++i)
108  m.push_back(&ckey[i->first]);
109  }
110  return m;
111  }
std::vector< const typename CKey::value_type * > transient_key_vector
transient key vector
Definition: OneToMany.h:37

◆ transientMap()

template<typename CKey, typename CVal, typename index = unsigned int>
static transient_map_type edm::OneToMany< CKey, CVal, index >::transientMap ( const ref_type ref,
const map_type map 
)
inlinestatic

fill transient map

Definition at line 84 of file OneToMany.h.

84  {
86  if (!map.empty()) {
87  const CKey &ckey = *ref.key;
88  const CVal &cval = *ref.val;
89  for (typename map_type::const_iterator i = map.begin(); i != map.end(); ++i) {
90  const map_assoc &a = i->second;
91  const typename CKey::value_type *k = &ckey[i->first];
92  std::vector<const typename CVal::value_type *> v;
93  for (typename map_assoc::const_iterator j = a.begin(); j != a.end(); ++j) {
94  const typename CVal::value_type *val = &cval[*j];
95  v.push_back(val);
96  }
97  m.insert(std::make_pair(k, v));
98  }
99  }
100  return m;
101  }
std::map< const typename CKey::value_type *, std::vector< const typename CVal::value_type * > > transient_map_type
transient map type
Definition: OneToMany.h:35
static val_type val(const ref_type &ref, const map_assoc &iv)
return values collection
Definition: OneToMany.h:73
double a
Definition: hdecay.h:121
std::vector< index > map_assoc
internal map associated data
Definition: OneToMany.h:18

◆ transientValVector()

template<typename CKey, typename CVal, typename index = unsigned int>
static transient_val_vector edm::OneToMany< CKey, CVal, index >::transientValVector ( const ref_type ref,
const map_type map 
)
inlinestatic

fill transient val vector

Definition at line 113 of file OneToMany.h.

113  {
115  if (!map.empty()) {
116  const CVal &cval = *ref.val;
117  for (typename map_type::const_iterator i = map.begin(); i != map.end(); ++i) {
118  const map_assoc &a = i->second;
119  std::vector<const typename CVal::value_type *> v;
120  m.push_back(v);
121  for (typename map_assoc::const_iterator j = a.begin(); j != a.end(); ++j)
122  m.back().push_back(&cval[*j]);
123  }
124  }
125  return m;
126  }
double a
Definition: hdecay.h:121
std::vector< std::vector< const typename CVal::value_type * > > transient_val_vector
transient val vector
Definition: OneToMany.h:39
std::vector< index > map_assoc
internal map associated data
Definition: OneToMany.h:18

◆ val()

template<typename CKey, typename CVal, typename index = unsigned int>
static val_type edm::OneToMany< CKey, CVal, index >::val ( const ref_type ref,
const map_assoc iv 
)
inlinestatic

return values collection

Definition at line 73 of file OneToMany.h.

Referenced by edm::OneToMany< std::vector< SimTrack >, std::vector< OmniClusterRef >, unsigned int >::transientMap().

73  {
74  val_type v;
75  for (typename map_assoc::const_iterator idx = iv.begin(), idxEnd = iv.end(); idx != idxEnd; ++idx)
76  v.push_back(edm::Ref<CVal>(ref.val, *idx));
77  return v;
78  }
edm::RefVector< CVal > val_type
values reference collection type
Definition: OneToMany.h:22