36 static int parity4(
const std::vector<T> &trg,
const std::vector<T> &ref) {
37 if (ref.size() != 4 || trg.size() != ref.size()) {
38 throw std::runtime_error(
"Parity vectors must have size 4.");
41 if (ref[0] == trg[0]) {
42 if (ref[1] == trg[1]) {
44 if (ref[2] == trg[2] && ref[3] == trg[3]) {
48 if (ref[2] == trg[3] && ref[3] == trg[2]) {
51 }
else if (ref[1] == trg[2]) {
53 if (ref[2] == trg[1] && ref[3] == trg[3]) {
57 if (ref[2] == trg[3] && ref[3] == trg[1]) {
60 }
else if (ref[1] == trg[3]) {
62 if (ref[2] == trg[2] && ref[3] == trg[1]) {
66 if (ref[2] == trg[1] && ref[3] == trg[2]) {
70 }
else if (ref[0] == trg[1]) {
71 if (ref[1] == trg[0]) {
73 if (ref[2] == trg[2] && ref[3] == trg[3]) {
77 if (ref[2] == trg[3] && ref[3] == trg[2]) {
80 }
else if (ref[1] == trg[2]) {
82 if (ref[2] == trg[0] && ref[3] == trg[3]) {
86 if (ref[2] == trg[3] && ref[3] == trg[0]) {
89 }
else if (ref[1] == trg[3]) {
91 if (ref[2] == trg[2] && ref[3] == trg[0]) {
95 if (ref[2] == trg[0] && ref[3] == trg[2]) {
99 }
else if (ref[0] == trg[2]) {
100 if (ref[1] == trg[1]) {
102 if (ref[2] == trg[0] && ref[3] == trg[3]) {
106 if (ref[2] == trg[3] && ref[3] == trg[0]) {
109 }
else if (ref[1] == trg[0]) {
111 if (ref[2] == trg[1] && ref[3] == trg[3]) {
115 if (ref[2] == trg[3] && ref[3] == trg[1]) {
118 }
else if (ref[1] == trg[3]) {
120 if (ref[2] == trg[0] && ref[3] == trg[1]) {
124 if (ref[2] == trg[1] && ref[3] == trg[0]) {
128 }
else if (ref[0] == trg[3]) {
129 if (ref[1] == trg[1]) {
131 if (ref[2] == trg[2] && ref[3] == trg[0]) {
135 if (ref[2] == trg[0] && ref[3] == trg[2]) {
138 }
else if (ref[1] == trg[2]) {
140 if (ref[2] == trg[1] && ref[3] == trg[0]) {
144 if (ref[2] == trg[0] && ref[3] == trg[1]) {
147 }
else if (ref[1] == trg[0]) {
149 if (ref[2] == trg[2] && ref[3] == trg[1]) {
153 if (ref[2] == trg[1] && ref[3] == trg[2]) {