Skip to content

Commit f8cd6dc

Browse files
committed
Improved code clarity based on code review
1 parent f0ae559 commit f8cd6dc

File tree

1 file changed

+60
-65
lines changed

1 file changed

+60
-65
lines changed

DataFormats/Provenance/src/ProductResolverIndexHelper.cc

Lines changed: 60 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -232,60 +232,44 @@ namespace edm {
232232

233233
// Put in an entry for the product with an empty process name
234234
// if it is not already there
235-
item.clearProcess();
236-
iter = items_->find(item);
237-
if (iter == items_->end()) {
238-
item.setIndex(ProductResolverIndexInitializing);
239-
items_->insert(item);
240-
//add entry for skipCurrentProcess
241-
item.setSkipCurrentProcess();
242-
item.setIndex(ProductResolverIndexInitializing);
243-
items_->insert(item);
244-
}
235+
auto insertNoProcessCase = [](Item& item, std::set<Item>& container) {
236+
item.clearProcess();
237+
auto iter = container.find(item);
238+
if (iter == container.end()) {
239+
item.setIndex(ProductResolverIndexInitializing);
240+
container.insert(item);
241+
//add entry for skipCurrentProcess
242+
item.setSkipCurrentProcess();
243+
item.setIndex(ProductResolverIndexInitializing);
244+
container.insert(item);
245+
}
246+
};
247+
insertNoProcessCase(item, *items_);
245248

246249
// Now put in entries for a contained class if this is a
247250
// recognized container.
248251
if (containedTypeID != TypeID(typeid(void)) && containedTypeID != TypeID()) {
249252
TypeWithDict containedType(containedTypeID.typeInfo());
250253

251-
Item containedItem(ELEMENT_TYPE, containedTypeID, moduleLabel, instance, process, savedProductIndex);
252-
iter = items_->find(containedItem);
253-
if (iter != items_->end()) {
254-
containedItem.setIndex(ProductResolverIndexAmbiguous);
255-
items_->erase(iter);
256-
}
257-
items_->insert(containedItem);
254+
auto insertAndCheckForAmbiguous = [](Item& item, std::set<Item>& container) {
255+
auto iter = container.find(item);
256+
if (iter != container.end()) {
257+
item.setIndex(ProductResolverIndexAmbiguous);
258+
container.erase(iter);
259+
}
260+
container.insert(item);
261+
};
258262

259-
containedItem.clearProcess();
260-
iter = items_->find(containedItem);
261-
if (iter == items_->end()) {
262-
containedItem.setIndex(ProductResolverIndexInitializing);
263-
items_->insert(containedItem);
264-
containedItem.setSkipCurrentProcess();
265-
containedItem.setIndex(ProductResolverIndexInitializing);
266-
items_->insert(containedItem);
267-
}
263+
Item containedItem(ELEMENT_TYPE, containedTypeID, moduleLabel, instance, process, savedProductIndex);
264+
insertAndCheckForAmbiguous(containedItem, *items_);
265+
insertNoProcessCase(containedItem, *items_);
268266

269267
// Repeat this for all public base classes of the contained type
270268
if (baseTypesOfContainedType) {
271269
for (TypeID const& baseTypeID : *baseTypesOfContainedType) {
272270
Item baseItem(ELEMENT_TYPE, baseTypeID, moduleLabel, instance, process, savedProductIndex);
273-
iter = items_->find(baseItem);
274-
if (iter != items_->end()) {
275-
baseItem.setIndex(ProductResolverIndexAmbiguous);
276-
items_->erase(iter);
277-
}
278-
items_->insert(baseItem);
279-
280-
baseItem.clearProcess();
281-
iter = items_->find(baseItem);
282-
if (iter == items_->end()) {
283-
baseItem.setIndex(ProductResolverIndexInitializing);
284-
items_->insert(baseItem);
285-
baseItem.setSkipCurrentProcess();
286-
baseItem.setIndex(ProductResolverIndexInitializing);
287-
items_->insert(baseItem);
288-
}
271+
insertAndCheckForAmbiguous(baseItem, *items_);
272+
insertNoProcessCase(baseItem, *items_);
289273
}
290274
}
291275
}
@@ -312,54 +296,65 @@ namespace edm {
312296
std::vector<edm::ProductResolverIndexHelper::IndexAndNames>::iterator itEnd,
313297
std::vector<std::string> const& orderedProcessNames,
314298
std::vector<char> const& processNames) {
299+
/*The order of the iterators should be
300+
0 : the empty process name case -> ''
301+
1 : the skip current process case -> '#'
302+
2+: the cases with a specific process name*/
315303
using IndexAndNames = edm::ProductResolverIndexHelper::IndexAndNames;
316304
assert(itEnd - itBegin > 2);
317-
assert(itBegin->startInProcessNames() == 0U);
318-
assert((itBegin + 1)->startInProcessNames() == 1U);
319-
assert(processNames[(itBegin + 1)->startInProcessNames()] == '#');
320-
assert(itBegin->index() == edm::ProductResolverIndexInitializing);
321-
assert((itBegin + 1)->index() == edm::ProductResolverIndexInitializing);
305+
const auto itNoProcess = itBegin;
306+
const auto itSkipCurrentProcess = itBegin + 1;
307+
const auto itFirstWithSetProcess = itBegin + 2;
308+
assert(itNoProcess->startInProcessNames() == 0U);
309+
assert(itSkipCurrentProcess->startInProcessNames() == 1U);
310+
assert(processNames[itSkipCurrentProcess->startInProcessNames()] == '#');
311+
assert(itNoProcess->index() == edm::ProductResolverIndexInitializing);
312+
assert(itSkipCurrentProcess->index() == edm::ProductResolverIndexInitializing);
322313
if (itEnd - itBegin == 3) {
323314
//only have one actual process
324-
*itBegin =
325-
IndexAndNames((itBegin + 2)->index(), itBegin->startInBigNamesContainer(), itBegin->startInProcessNames());
315+
*itNoProcess = IndexAndNames(itFirstWithSetProcess->index(),
316+
itNoProcess->startInBigNamesContainer(),
317+
itNoProcess->startInProcessNames());
326318
//Now handle skipCurrentProcess
327-
if (orderedProcessNames[0] == &processNames[(itBegin + 2)->startInProcessNames()]) {
319+
if (orderedProcessNames[0] == &processNames[itFirstWithSetProcess->startInProcessNames()]) {
328320
//the one process is the current process
329-
*(itBegin + 1) = IndexAndNames(ProductResolverIndexInvalid,
330-
(itBegin + 1)->startInBigNamesContainer(),
331-
(itBegin + 1)->startInProcessNames());
321+
*itSkipCurrentProcess = IndexAndNames(ProductResolverIndexInvalid,
322+
itSkipCurrentProcess->startInBigNamesContainer(),
323+
itSkipCurrentProcess->startInProcessNames());
332324
} else {
333-
*(itBegin + 1) = IndexAndNames(
334-
(itBegin + 2)->index(), (itBegin + 1)->startInBigNamesContainer(), (itBegin + 1)->startInProcessNames());
325+
*itSkipCurrentProcess = IndexAndNames(itFirstWithSetProcess->index(),
326+
itSkipCurrentProcess->startInBigNamesContainer(),
327+
itSkipCurrentProcess->startInProcessNames());
335328
}
336329
} else {
337330
bool foundFirstMatch = false;
338331
for (auto const& proc : orderedProcessNames) {
339-
auto it = itBegin + 2;
332+
auto it = itFirstWithSetProcess;
340333
while (it != itEnd && proc != &processNames[it->startInProcessNames()]) {
341334
++it;
342335
}
343336
if (it != itEnd) {
344337
if (not foundFirstMatch) {
345338
foundFirstMatch = true;
346339
//found a process that matches
347-
*itBegin =
348-
IndexAndNames(it->index(), itBegin->startInBigNamesContainer(), itBegin->startInProcessNames());
340+
*itNoProcess = IndexAndNames(
341+
it->index(), itNoProcess->startInBigNamesContainer(), itNoProcess->startInProcessNames());
349342
//Now handle skipCurrentProcess
350343
if (proc != orderedProcessNames[0]) {
351-
*(itBegin + 1) = IndexAndNames(
352-
it->index(), (itBegin + 1)->startInBigNamesContainer(), (itBegin + 1)->startInProcessNames());
344+
*itSkipCurrentProcess = IndexAndNames(it->index(),
345+
itSkipCurrentProcess->startInBigNamesContainer(),
346+
itSkipCurrentProcess->startInProcessNames());
353347
break;
354348
} else {
355349
//this process is the current process
356-
*(itBegin + 1) = IndexAndNames(ProductResolverIndexInvalid,
357-
(itBegin + 1)->startInBigNamesContainer(),
358-
(itBegin + 1)->startInProcessNames());
350+
*itSkipCurrentProcess = IndexAndNames(ProductResolverIndexInvalid,
351+
itSkipCurrentProcess->startInBigNamesContainer(),
352+
itSkipCurrentProcess->startInProcessNames());
359353
}
360354
} else {
361-
*(itBegin + 1) = IndexAndNames(
362-
it->index(), (itBegin + 1)->startInBigNamesContainer(), (itBegin + 1)->startInProcessNames());
355+
*itSkipCurrentProcess = IndexAndNames(it->index(),
356+
itSkipCurrentProcess->startInBigNamesContainer(),
357+
itSkipCurrentProcess->startInProcessNames());
363358
break;
364359
}
365360
}

0 commit comments

Comments
 (0)