1 #ifndef CommonTools_Utils_associationMapFilterValues_h 2 #define CommonTools_Utils_associationMapFilterValues_h 13 template <
typename T_AssociationMap,
typename T_Key,
14 typename T_ValueIndex,
typename T_Value,
15 typename T_ValueIndices>
17 const T_ValueIndex& valueIndex,
const T_Value&
value,
18 const T_ValueIndices& value_indices) {
19 if(value_indices.has(valueIndex)) {
20 ret.insert(key, value);
25 template <
typename ValueTag>
29 template <
typename C,
typename T,
typename F>
31 template <
typename T_AssociationMap,
typename T_KeyValue,
typename T_ValueIndices>
32 static void insert(T_AssociationMap& ret,
const T_KeyValue& keyValue,
const T_ValueIndices& value_indices) {
33 findInsert(ret, keyValue.key, keyValue.val.key(), keyValue.val, value_indices);
39 template <
typename T_AssociationMap,
typename T_KeyValue,
typename T_ValueIndices>
40 static void insert(T_AssociationMap& ret,
const T_KeyValue& keyValue,
const T_ValueIndices& value_indices) {
41 findInsert(ret, keyValue.key, keyValue.val.key(), keyValue.val, value_indices);
46 template <
typename C,
typename T,
typename F>
48 template <
typename T_AssociationMap,
typename T_KeyValue,
typename T_ValueIndices>
49 static void insert(T_AssociationMap& ret,
const T_KeyValue& keyValue,
const T_ValueIndices& value_indices) {
50 for(
const auto&
value: keyValue.val) {
57 template <
typename C,
typename T,
typename F,
typename Q>
58 struct IfFound<
std::vector<std::pair<edm::Ref<C, T, F>, Q> > > {
59 template <
typename T_AssociationMap,
typename T_KeyValue,
typename T_ValueIndices>
60 static void insert(T_AssociationMap& ret,
const T_KeyValue& keyValue,
const T_ValueIndices& value_indices) {
61 for(
const auto&
value: keyValue.val) {
68 template <
typename T,
typename Q>
69 struct IfFound<
std::vector<std::pair<edm::RefToBase<T>, Q> > > {
70 template <
typename T_AssociationMap,
typename T_KeyValue,
typename T_ValueIndices>
71 static void insert(T_AssociationMap& ret,
const T_KeyValue& keyValue,
const T_ValueIndices& value_indices) {
72 for(
const auto&
value: keyValue.val) {
79 template <
typename T_RefVector>
81 template <
typename T_Set,
typename T_RefProd>
83 void fill(T_Set&
set,
const T_RefVector& valueRefs,
const T_RefProd& refProd) {
84 for(
const auto& ref: valueRefs) {
86 set.insert(ref.key());
94 template <
typename T_Set,
typename T_RefProd>
97 for(
size_t i=0;
i<valueView.size(); ++
i) {
98 const auto& ref = valueView.refAt(
i);
100 set.insert(ref.key());
126 template <
typename T_AssociationMap,
typename T_RefVector>
134 T_AssociationMap ret(map.refProd());
138 value_indices.
reserve(valueRefs.size());
141 for(
const auto& keyValue: map) {
edm::Ref< Container > Ref
static void insert(T_AssociationMap &ret, const T_KeyValue &keyValue, const T_ValueIndices &value_indices)
static void insert(T_AssociationMap &ret, const T_KeyValue &keyValue, const T_ValueIndices &value_indices)
T_AssociationMap associationMapFilterValues(const T_AssociationMap &map, const T_RefVector &valueRefs)
static void fill(T_Set &set, const edm::View< T > &valueView, const T_RefProd &refProd)
bool insert(Storage &iStorage, ItemType *iItem, const IdTag &iIdTag)
static void insert(T_AssociationMap &ret, const T_KeyValue &keyValue, const T_ValueIndices &value_indices)
void findInsert(T_AssociationMap &ret, const T_Key &key, const T_ValueIndex &valueIndex, const T_Value &value, const T_ValueIndices &value_indices)
static void insert(T_AssociationMap &ret, const T_KeyValue &keyValue, const T_ValueIndices &value_indices)
static void insert(T_AssociationMap &ret, const T_KeyValue &keyValue, const T_ValueIndices &value_indices)
void checkRef(const RP &rp, const R &r)
throw if r hasn't the same id as rp
void reserve(unsigned int size)
Reserve memory for the set.
edm::RefVector< Container > RefVector
static void fill(T_Set &set, const T_RefVector &valueRefs, const T_RefProd &refProd)