32 static int parity4(
const std::vector<T> &trg,
const std::vector<T> &ref) {
33 if (ref.size() != 4 || trg.size() != ref.size()) {
34 throw std::runtime_error(
"Parity vectors must have size 4.");
37 if (ref[0] == trg[0]) {
38 if (ref[1] == trg[1]) {
40 if (ref[2] == trg[2] && ref[3] == trg[3]) {
44 if (ref[2] == trg[3] && ref[3] == trg[2]) {
47 }
else if (ref[1] == trg[2]) {
49 if (ref[2] == trg[1] && ref[3] == trg[3]) {
53 if (ref[2] == trg[3] && ref[3] == trg[1]) {
56 }
else if (ref[1] == trg[3]) {
58 if (ref[2] == trg[2] && ref[3] == trg[1]) {
62 if (ref[2] == trg[1] && ref[3] == trg[2]) {
66 }
else if (ref[0] == trg[1]) {
67 if (ref[1] == trg[0]) {
69 if (ref[2] == trg[2] && ref[3] == trg[3]) {
73 if (ref[2] == trg[3] && ref[3] == trg[2]) {
76 }
else if (ref[1] == trg[2]) {
78 if (ref[2] == trg[0] && ref[3] == trg[3]) {
82 if (ref[2] == trg[3] && ref[3] == trg[0]) {
85 }
else if (ref[1] == trg[3]) {
87 if (ref[2] == trg[2] && ref[3] == trg[0]) {
91 if (ref[2] == trg[0] && ref[3] == trg[2]) {
95 }
else if (ref[0] == trg[2]) {
96 if (ref[1] == trg[1]) {
98 if (ref[2] == trg[0] && ref[3] == trg[3]) {
102 if (ref[2] == trg[3] && ref[3] == trg[0]) {
105 }
else if (ref[1] == trg[0]) {
107 if (ref[2] == trg[1] && ref[3] == trg[3]) {
111 if (ref[2] == trg[3] && ref[3] == trg[1]) {
114 }
else if (ref[1] == trg[3]) {
116 if (ref[2] == trg[0] && ref[3] == trg[1]) {
120 if (ref[2] == trg[1] && ref[3] == trg[0]) {
124 }
else if (ref[0] == trg[3]) {
125 if (ref[1] == trg[1]) {
127 if (ref[2] == trg[2] && ref[3] == trg[0]) {
131 if (ref[2] == trg[0] && ref[3] == trg[2]) {
134 }
else if (ref[1] == trg[2]) {
136 if (ref[2] == trg[1] && ref[3] == trg[0]) {
140 if (ref[2] == trg[0] && ref[3] == trg[1]) {
143 }
else if (ref[1] == trg[0]) {
145 if (ref[2] == trg[2] && ref[3] == trg[1]) {
149 if (ref[2] == trg[1] && ref[3] == trg[2]) {