11 //----------------------------------------------------------------------------
\r
12 inline unsigned int insert0(const unsigned int i0, const unsigned int bitnum)
\r
14 unsigned int msk = (1 << bitnum) - 1;
\r
15 return ((~msk & i0) << 1) | (msk & i0);
\r
18 inline unsigned int insert1(const unsigned int i0, const unsigned int bitnum)
\r
20 unsigned int msk = (1 << bitnum) - 1;
\r
21 return ((~msk & i0) << 1) | (1 << bitnum) | (msk & i0);
\r
25 inline void swap(T &x, T &y)
\r
32 //----------------------------------------------------------------------------
\r
33 //----------------------------------------------------------------------------
\r
34 inline void qcuc_ccnot(double &r0, double &i0, double &r1, double &i1)
\r
40 //----------------------------------------------------------------------------
\r
41 inline void qcuc_cnot(double &r0, double &i0, double &r1, double &i1)
\r
47 //----------------------------------------------------------------------------
\r
48 inline void qcuc_crot(double &r0, double &i0, double c, double s)
\r
52 r0 = c * r1 - s * i1;
\r
53 i0 = c * i1 + s * r1;
\r
56 //----------------------------------------------------------------------------
\r
57 inline void qcuc_hadamard(double &r0, double &i0, double &r1, double &i1)
\r
59 const double isq2 = 0.70710678118654752440084436210485;
\r
64 r0 = isq2 * ( rr1 + rr0);
\r
65 i0 = isq2 * ( ii1 + ii0);
\r
66 r1 = isq2 * (- rr1 + rr0);
\r
67 i1 = isq2 * (- ii1 + ii0);
\r
70 //----------------------------------------------------------------------------
\r
71 inline void qcuc_not(double &r0, double &i0, double &r1, double &i1)
\r
77 //----------------------------------------------------------------------------
\r
78 inline void qcuc_pauli_x(double &r0, double &i0, double &r1, double &i1)
\r
84 //----------------------------------------------------------------------------
\r
85 inline void qcuc_pauli_y(double &r0, double &i0, double &r1, double &i1)
\r
95 //----------------------------------------------------------------------------
\r
96 inline void qcuc_pauli_z(double &r0, double &i0)
\r
102 //----------------------------------------------------------------------------
\r
103 inline void qcuc_swap(double &r0, double &i0, double &r1, double &i1)
\r
109 //----------------------------------------------------------------------------
\r
112 #endif //QCUNITCALC_H
\r