in fbpcs/emp_games/attribution/Aggregator.cpp [397:447]
virtual Aggregation reveal() const override {
PcmAggregation out;
for (const auto& [uid, impIdToMetrics] : uidToImpToPcmMetrics_) {
XLOGF(
DBG,
"Revealing PCM aggregation results for rule={}, uid={}",
attributionRule_.name,
uid);
for (const auto& [privateImpId, metricsList] : impIdToMetrics) {
for (const auto& metrics : metricsList) {
IF_OMNISCIENT_MODE {
const auto campaign_bits =
metrics.campaign_bits.reveal<int64_t>(emp::PUBLIC);
const auto conversion_bits =
metrics.conversion_bits.reveal<int64_t>(emp::PUBLIC);
if ((campaign_bits != 0) && (conversion_bits != 0)) {
const auto key = std::pair(campaign_bits, conversion_bits);
if (out.campaignToConversionBitsCount.find(key) !=
out.campaignToConversionBitsCount.end()) {
out.campaignToConversionBitsCount[key] += 1;
} else {
out.campaignToConversionBitsCount[key] = 1;
}
}
}
else {
// Revealing plaintext to publisher side only
const auto campaign_bits =
metrics.campaign_bits.reveal<int64_t>(emp::ALICE);
const auto conversion_bits =
metrics.conversion_bits.reveal<int64_t>(emp::ALICE);
// skipping over the non-attributed metrics
if ((campaign_bits != 0) && (conversion_bits != 0)) {
const auto key = std::pair(campaign_bits, conversion_bits);
if (out.campaignToConversionBitsCount.find(key) !=
out.campaignToConversionBitsCount.end()) {
out.campaignToConversionBitsCount[key] += 1;
} else {
out.campaignToConversionBitsCount[key] = 1;
}
}
}
}
}
}
return out.toDynamic();
}