| 361 | |
| 362 | template <NumQubitsFlag Ctrls, NumQubitsFlag Targs> |
| 363 | void invokeApiOperation( |
| 364 | auto operation, Qureg qureg, |
| 365 | vector<int> ctrls, vector<int> states, int numCtrls, |
| 366 | vector<int> targs, int numTargs, |
| 367 | auto&... args |
| 368 | ) { |
| 369 | assertNumQubitsFlagsValid(Ctrls, Targs, ctrls, states, targs); |
| 370 | |
| 371 | if constexpr (Ctrls == zero) { |
| 372 | if constexpr (Targs == zero) operation(qureg, args...); |
| 373 | if constexpr (Targs == one) operation(qureg, targs[0], args...); |
| 374 | if constexpr (Targs == two) operation(qureg, targs[0], targs[1], args...); |
| 375 | if constexpr (Targs == any) operation(qureg, targs.data(), numTargs, args...); |
| 376 | } |
| 377 | if constexpr (Ctrls == one) { |
| 378 | if constexpr (Targs == zero) operation(qureg, ctrls[0], args...); |
| 379 | if constexpr (Targs == one) operation(qureg, ctrls[0], targs[0], args...); |
| 380 | if constexpr (Targs == two) operation(qureg, ctrls[0], targs[0], targs[1], args...); |
| 381 | if constexpr (Targs == any) operation(qureg, ctrls[0], targs.data(), numTargs, args...); |
| 382 | } |
| 383 | if constexpr (Ctrls == any) { |
| 384 | if constexpr (Targs == zero) operation(qureg, ctrls.data(), numCtrls, args...); |
| 385 | if constexpr (Targs == one) operation(qureg, ctrls.data(), numCtrls, targs[0], args...); |
| 386 | if constexpr (Targs == two) operation(qureg, ctrls.data(), numCtrls, targs[0], targs[1], args...); |
| 387 | if constexpr (Targs == any) operation(qureg, ctrls.data(), numCtrls, targs.data(), numTargs, args...); |
| 388 | } |
| 389 | if constexpr (Ctrls == anystates) { |
| 390 | if constexpr (Targs == zero) operation(qureg, ctrls.data(), states.data(), numCtrls, args...); |
| 391 | if constexpr (Targs == one) operation(qureg, ctrls.data(), states.data(), numCtrls, targs[0], args...); |
| 392 | if constexpr (Targs == two) operation(qureg, ctrls.data(), states.data(), numCtrls, targs[0], targs[1], args...); |
| 393 | if constexpr (Targs == any) operation(qureg, ctrls.data(), states.data(), numCtrls, targs.data(), numTargs, args...); |
| 394 | } |
| 395 | } |
| 396 | |
| 397 | // overload to avoid passing numCtrls and numTargs |
| 398 |
nothing calls this directly
no test coverage detected