MCPcopy Create free account
hub / github.com/QuEST-Kit/QuEST / invokeApiOperation

Function invokeApiOperation

tests/unit/operations.cpp:363–395  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

361
362template <NumQubitsFlag Ctrls, NumQubitsFlag Targs>
363void 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

Callers

nothing calls this directly

Calls 1

Tested by

no test coverage detected