virtual Aggregation reveal()

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();
  }