| 52 | } |
| 53 | |
| 54 | void cudaq::Trace::appendMeasurement(std::string_view name, |
| 55 | std::vector<QuditInfo> targets, |
| 56 | std::optional<std::string> register_name) { |
| 57 | assert(!targets.empty() && "A measurement must have at least one target"); |
| 58 | auto findMaxID = [](const std::vector<QuditInfo> &qudits) -> std::size_t { |
| 59 | return std::max_element(qudits.cbegin(), qudits.cend(), |
| 60 | [](auto &a, auto &b) { return a.id < b.id; }) |
| 61 | ->id; |
| 62 | }; |
| 63 | numQudits = std::max(numQudits, findMaxID(targets) + 1); |
| 64 | instructions.emplace_back(name, std::vector<double>{}, |
| 65 | std::vector<QuditInfo>{}, std::move(targets), |
| 66 | std::nullopt, TraceInstructionType::Measurement, |
| 67 | std::move(register_name)); |
| 68 | } |