1 #ifndef DataFormats_Common_OneToOneGeneric_h 2 #define DataFormats_Common_OneToOneGeneric_h 10 template<
typename CKey,
typename CVal,
typename index =
unsigned int,
33 typedef std::map<index_type, map_assoc>
map_type;
44 static void insert(ref_type& ref, map_type&
m,
45 key_type
const&
k, data_type
const&
v) {
46 if(k.isNull() || v.isNull()) {
48 "can't insert null references in AssociationMap");
50 if(ref.
key.isNull()) {
51 if(k.isTransient() || v.isTransient()) {
53 "can't insert transient references in uninitialized AssociationMap");
56 auto getter =ref.
key.productGetter();
57 if(getter ==
nullptr) {
59 "Can't insert into AssociationMap unless it was properly initialized.\n" 60 "The most common fix for this is to add arguments to the call to the\n" 61 "AssociationMap constructor that are valid Handle's to the containers.\n" 62 "If you don't have valid handles or either template parameter to the\n" 63 "AssociationMap is a View, then see the comments in AssociationMap.h.\n" 64 "(note this was a new requirement added in the 7_5_X release series)\n");
66 ref.
key = KeyRefProd(k.id(), getter);
67 ref.
val = ValRefProd(v.id(), ref.
val.productGetter());
74 static val_type
val(ref_type
const& ref, map_assoc iv) {
80 static void sort(map_type&) { }
82 static transient_map_type
transientMap(ref_type
const& ref, map_type
const&
map) {
85 CKey
const& ckey = *ref.
key;
86 CVal
const& cval = *ref.
val;
87 for(
typename map_type::const_iterator
i = map.begin();
i != map.end(); ++
i) {
88 typename CKey::value_type
const*
k = &ckey[
i->first];
90 m.insert(std::make_pair(k, v));
97 transient_key_vector
m;
99 CKey
const& ckey = *ref.
key;
100 for(
typename map_type::const_iterator
i = map.begin();
i != map.end(); ++
i)
101 m.push_back(& ckey[
i->first]);
107 transient_val_vector
m;
109 CVal
const& cval = *ref.
val;
110 for(
typename map_type::const_iterator
i = map.begin();
i != map.end(); ++
i) {
111 m.push_back(& cval[
i->second]);
KeyRefProd keyrefprod_type
reference to "key" collection
KeyRef key_type
insert key type
static transient_map_type transientMap(ref_type const &ref, map_type const &map)
fill transient map
index map_assoc
internal map associated data
std::map< typename CKey::value_type const *, typename CVal::value_type const * > transient_map_type
transient map type
ValRefProd valrefprod_type
reference to "value" collection
ValRef val_type
values reference collection type
std::vector< typename CVal::value_type const * > transient_val_vector
transient val vector
std::vector< typename CKey::value_type const * > transient_key_vector
transient key vector
static void sort(map_type &)
sort
static void throwThis(Code category, char const *message0="", char const *message1="", char const *message2="", char const *message3="", char const *message4="")
ValRef data_type
insert val type
Container::value_type value_type
RefProd< C > refprod_type
index index_type
index type
static transient_key_vector transientKeyVector(ref_type const &ref, map_type const &map)
fill transient key vector
static val_type val(ref_type const &ref, map_assoc iv)
return values collection
static void insert(ref_type &ref, map_type &m, key_type const &k, data_type const &v)
insert in the map
helpers::KeyVal< keyrefprod_type, valrefprod_type > ref_type
reference set type
static transient_val_vector transientValVector(ref_type const &ref, map_type const &map)
fill transient val vector
static map_type::size_type size(map_assoc const &)
size of data_type
void checkRef(const RP &rp, const R &r)
throw if r hasn't the same id as rp
std::map< index_type, map_assoc > map_type
map type