aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2024-09-05 08:53:38 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2024-09-05 08:55:25 +0200
commitfd5ddb3db9f50411ca579d84f225f265ca35b56a (patch)
treeb659112cc0e2abd6c7edb08b0938c0d2de4ca066 /src
parentc9e2d6466e42d6b779ac9ffa7c5ee9a9c7558df8 (diff)
downloadnissy-core-fd5ddb3db9f50411ca579d84f225f265ca35b56a.tar.gz
nissy-core-fd5ddb3db9f50411ca579d84f225f265ca35b56a.zip
Rename constants from _underscore to CAPS
Diffstat (limited to '')
-rw-r--r--src/arch/avx2.h40
-rw-r--r--src/arch/common.h38
-rw-r--r--src/arch/neon.h74
-rw-r--r--src/arch/portable.h80
-rw-r--r--src/core/constant_cubes.h228
-rw-r--r--src/core/cube.h68
-rw-r--r--src/core/io_cube.h98
-rw-r--r--src/core/io_moves.h26
-rw-r--r--src/core/io_trans.h10
-rw-r--r--src/core/moves.h122
-rw-r--r--src/core/transform.h229
-rw-r--r--src/core/transform_with_switch.h616
-rw-r--r--src/nissy.c8
-rw-r--r--src/solvers/generic/generic.h20
-rw-r--r--src/solvers/h48/coordinate.h14
-rw-r--r--src/solvers/h48/gendata_cocsep.h22
-rw-r--r--src/solvers/h48/gendata_h48.h48
-rw-r--r--src/solvers/h48/map.h28
-rw-r--r--src/solvers/h48/solve.h42
-rw-r--r--src/utils/constants.h526
-rw-r--r--src/utils/dbg_log.h8
-rw-r--r--src/utils/math.h52
22 files changed, 1186 insertions, 1211 deletions
diff --git a/src/arch/avx2.h b/src/arch/avx2.h
index b1a7ab7..8d53f8f 100644
--- a/src/arch/avx2.h
+++ b/src/arch/avx2.h
@@ -16,7 +16,7 @@
16#define solved static_cube( \ 16#define solved static_cube( \
17 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) 17 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
18 18
19_static void 19STATIC void
20pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) 20pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
21{ 21{
22 uint8_t aux[32]; 22 uint8_t aux[32];
@@ -26,7 +26,7 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
26 memcpy(e, aux+16, 12); 26 memcpy(e, aux+16, 12);
27} 27}
28 28
29_static_inline bool 29STATIC_INLINE bool
30equal(cube_t c1, cube_t c2) 30equal(cube_t c1, cube_t c2)
31{ 31{
32 int32_t mask; 32 int32_t mask;
@@ -38,7 +38,7 @@ equal(cube_t c1, cube_t c2)
38 return mask == ~0; 38 return mask == ~0;
39} 39}
40 40
41_static_inline cube_t 41STATIC_INLINE cube_t
42invertco(cube_t c) 42invertco(cube_t c)
43{ 43{
44 cube_t co, shleft, shright, summed, newco, cleanco, ret; 44 cube_t co, shleft, shright, summed, newco, cleanco, ret;
@@ -54,7 +54,7 @@ invertco(cube_t c)
54 return ret; 54 return ret;
55} 55}
56 56
57_static_inline cube_t 57STATIC_INLINE cube_t
58compose_epcpeo(cube_t c1, cube_t c2) 58compose_epcpeo(cube_t c1, cube_t c2)
59{ 59{
60 cube_t b, s, eo2; 60 cube_t b, s, eo2;
@@ -74,13 +74,13 @@ compose_epcpeo(cube_t c1, cube_t c2)
74 return s; 74 return s;
75} 75}
76 76
77_static_inline cube_t 77STATIC_INLINE cube_t
78compose_edges(cube_t c1, cube_t c2) 78compose_edges(cube_t c1, cube_t c2)
79{ 79{
80 return compose_epcpeo(c1, c2); 80 return compose_epcpeo(c1, c2);
81} 81}
82 82
83_static_inline cube_t 83STATIC_INLINE cube_t
84compose_corners(cube_t c1, cube_t c2) 84compose_corners(cube_t c1, cube_t c2)
85{ 85{
86 /* 86 /*
@@ -91,7 +91,7 @@ compose_corners(cube_t c1, cube_t c2)
91 return compose(c1, c2); 91 return compose(c1, c2);
92} 92}
93 93
94_static_inline cube_t 94STATIC_INLINE cube_t
95compose(cube_t c1, cube_t c2) 95compose(cube_t c1, cube_t c2)
96{ 96{
97 cube_t s, co1, co2, aux, auy1, auy2, auz1, auz2; 97 cube_t s, co1, co2, aux, auy1, auy2, auz1, auz2;
@@ -114,7 +114,7 @@ compose(cube_t c1, cube_t c2)
114 return s; 114 return s;
115} 115}
116 116
117_static_inline cube_t 117STATIC_INLINE cube_t
118cleanaftershuffle(cube_t c) 118cleanaftershuffle(cube_t c)
119{ 119{
120 __m256i b; 120 __m256i b;
@@ -127,7 +127,7 @@ cleanaftershuffle(cube_t c)
127 return _mm256_andnot_si256(b, c); 127 return _mm256_andnot_si256(b, c);
128} 128}
129 129
130_static_inline cube_t 130STATIC_INLINE cube_t
131inverse(cube_t c) 131inverse(cube_t c)
132{ 132{
133 /* Method taken from Andrew Skalski's vcube[1]. The addition sequence 133 /* Method taken from Andrew Skalski's vcube[1]. The addition sequence
@@ -166,7 +166,7 @@ inverse(cube_t c)
166 return invertco(ret); 166 return invertco(ret);
167} 167}
168 168
169_static_inline int64_t 169STATIC_INLINE int64_t
170coord_co(cube_t c) 170coord_co(cube_t c)
171{ 171{
172 cube_t co; 172 cube_t co;
@@ -182,7 +182,7 @@ coord_co(cube_t c)
182 return ret; 182 return ret;
183} 183}
184 184
185_static_inline int64_t 185STATIC_INLINE int64_t
186coord_csep(cube_t c) 186coord_csep(cube_t c)
187{ 187{
188 cube_t cp, shifted; 188 cube_t cp, shifted;
@@ -195,13 +195,13 @@ coord_csep(cube_t c)
195 return mask & 0x7F; 195 return mask & 0x7F;
196} 196}
197 197
198_static_inline int64_t 198STATIC_INLINE int64_t
199coord_cocsep(cube_t c) 199coord_cocsep(cube_t c)
200{ 200{
201 return (coord_co(c) << 7) + coord_csep(c); 201 return (coord_co(c) << 7) + coord_csep(c);
202} 202}
203 203
204_static_inline int64_t 204STATIC_INLINE int64_t
205coord_eo(cube_t c) 205coord_eo(cube_t c)
206{ 206{
207 cube_t eo, shifted; 207 cube_t eo, shifted;
@@ -214,7 +214,7 @@ coord_eo(cube_t c)
214 return mask >> 17; 214 return mask >> 17;
215} 215}
216 216
217_static_inline int64_t 217STATIC_INLINE int64_t
218coord_esep(cube_t c) 218coord_esep(cube_t c)
219{ 219{
220 cube_t ep; 220 cube_t ep;
@@ -229,8 +229,8 @@ coord_esep(cube_t c)
229 for (i = 0, j = 0; i < 12; i++, mem[i/8 + 2] >>= 8) { 229 for (i = 0, j = 0; i < 12; i++, mem[i/8 + 2] >>= 8) {
230 e = mem[i/8 + 2]; 230 e = mem[i/8 + 2];
231 231
232 bit1 = (e & _esepbit1) >> 2; 232 bit1 = (e & ESEPBIT_1) >> 2;
233 bit2 = (e & _esepbit2) >> 3; 233 bit2 = (e & ESEPBIT_2) >> 3;
234 is1 = (1 - bit2) * bit1; 234 is1 = (1 - bit2) * bit1;
235 235
236 ret1 += bit2 * binomial[11-i][k]; 236 ret1 += bit2 * binomial[11-i][k];
@@ -245,19 +245,19 @@ coord_esep(cube_t c)
245 return ret1 * 70 + ret2; 245 return ret1 * 70 + ret2;
246} 246}
247 247
248_static_inline void 248STATIC_INLINE void
249copy_corners(cube_t *dest, cube_t src) 249copy_corners(cube_t *dest, cube_t src)
250{ 250{
251 *dest = _mm256_blend_epi32(*dest, src, 0x0F); 251 *dest = _mm256_blend_epi32(*dest, src, 0x0F);
252} 252}
253 253
254_static_inline void 254STATIC_INLINE void
255copy_edges(cube_t *dest, cube_t src) 255copy_edges(cube_t *dest, cube_t src)
256{ 256{
257 *dest = _mm256_blend_epi32(*dest, src, 0xF0); 257 *dest = _mm256_blend_epi32(*dest, src, 0xF0);
258} 258}
259 259
260_static_inline void 260STATIC_INLINE void
261set_eo(cube_t *cube, int64_t eo) 261set_eo(cube_t *cube, int64_t eo)
262{ 262{
263 int64_t eo12, eotop, eobot; 263 int64_t eo12, eotop, eobot;
@@ -282,7 +282,7 @@ set_eo(cube_t *cube, int64_t eo)
282 *cube = _mm256_or_si256(*cube, veo); 282 *cube = _mm256_or_si256(*cube, veo);
283} 283}
284 284
285_static_inline cube_t 285STATIC_INLINE cube_t
286invcoord_esep(int64_t esep) 286invcoord_esep(int64_t esep)
287{ 287{
288 cube_t eee, ret; 288 cube_t eee, ret;
diff --git a/src/arch/common.h b/src/arch/common.h
index d8d2305..346403b 100644
--- a/src/arch/common.h
+++ b/src/arch/common.h
@@ -1,26 +1,26 @@
1_static void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]); 1STATIC void pieces(cube_t *, uint8_t [static 8], uint8_t [static 12]);
2_static_inline bool equal(cube_t, cube_t); 2STATIC_INLINE bool equal(cube_t, cube_t);
3_static_inline cube_t invertco(cube_t); 3STATIC_INLINE cube_t invertco(cube_t);
4_static_inline cube_t compose_epcpeo(cube_t, cube_t); 4STATIC_INLINE cube_t compose_epcpeo(cube_t, cube_t);
5_static_inline cube_t compose_edges(cube_t, cube_t); 5STATIC_INLINE cube_t compose_edges(cube_t, cube_t);
6_static_inline cube_t compose_corners(cube_t, cube_t); 6STATIC_INLINE cube_t compose_corners(cube_t, cube_t);
7_static_inline cube_t compose(cube_t, cube_t); 7STATIC_INLINE cube_t compose(cube_t, cube_t);
8_static_inline cube_t inverse(cube_t); 8STATIC_INLINE cube_t inverse(cube_t);
9 9
10_static_inline int64_t coord_co(cube_t); 10STATIC_INLINE int64_t coord_co(cube_t);
11_static_inline int64_t coord_csep(cube_t); 11STATIC_INLINE int64_t coord_csep(cube_t);
12_static_inline int64_t coord_cocsep(cube_t); 12STATIC_INLINE int64_t coord_cocsep(cube_t);
13_static_inline int64_t coord_eo(cube_t); 13STATIC_INLINE int64_t coord_eo(cube_t);
14_static_inline int64_t coord_esep(cube_t); 14STATIC_INLINE int64_t coord_esep(cube_t);
15 15
16_static_inline void copy_corners(cube_t *, cube_t); 16STATIC_INLINE void copy_corners(cube_t *, cube_t);
17_static_inline void copy_edges(cube_t *, cube_t); 17STATIC_INLINE void copy_edges(cube_t *, cube_t);
18_static_inline void set_eo(cube_t *, int64_t); 18STATIC_INLINE void set_eo(cube_t *, int64_t);
19_static_inline cube_t invcoord_esep(int64_t); 19STATIC_INLINE cube_t invcoord_esep(int64_t);
20 20
21_static_inline void invcoord_esep_array(int64_t, int64_t, uint8_t[static 12]); 21STATIC_INLINE void invcoord_esep_array(int64_t, int64_t, uint8_t[static 12]);
22 22
23_static_inline void 23STATIC_INLINE void
24invcoord_esep_array(int64_t set1, int64_t set2, uint8_t mem[static 12]) 24invcoord_esep_array(int64_t set1, int64_t set2, uint8_t mem[static 12])
25{ 25{
26 int64_t bit1, bit2, i, j, jj, k, l, s, v, w, is1; 26 int64_t bit1, bit2, i, j, jj, k, l, s, v, w, is1;
diff --git a/src/arch/neon.h b/src/arch/neon.h
index b6734b7..dee0eba 100644
--- a/src/arch/neon.h
+++ b/src/arch/neon.h
@@ -4,8 +4,8 @@
4#define _ep_neon vcombine_u8(vdupq_n_u8(0x0F), vdupq_n_u8(0x0F)) 4#define _ep_neon vcombine_u8(vdupq_n_u8(0x0F), vdupq_n_u8(0x0F))
5#define _eo_neon vcombine_u8(vdupq_n_u8(0x10), vdupq_n_u8(0x10)) 5#define _eo_neon vcombine_u8(vdupq_n_u8(0x10), vdupq_n_u8(0x10))
6 6
7_static_inline uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t); 7STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t);
8_static_inline uint8x16_t compose_corners_slim(uint8x16_t, uint8x16_t); 8STATIC_INLINE uint8x16_t compose_corners_slim(uint8x16_t, uint8x16_t);
9 9
10// static cube 10// static cube
11#define static_cube(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \ 11#define static_cube(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \
@@ -26,7 +26,7 @@ _static_inline uint8x16_t compose_corners_slim(uint8x16_t, uint8x16_t);
26#define solved static_cube( \ 26#define solved static_cube( \
27 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) 27 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
28 28
29_static void 29STATIC void
30pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) 30pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
31{ 31{
32 // First 8 bytes of the corner vector are copied from the c array 32 // First 8 bytes of the corner vector are copied from the c array
@@ -39,7 +39,7 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
39 vst1_lane_u32((uint32_t *)(e + 8), vreinterpret_u32_u8(vget_high_u8(cube->edge)), 0); 39 vst1_lane_u32((uint32_t *)(e + 8), vreinterpret_u32_u8(vget_high_u8(cube->edge)), 0);
40} 40}
41 41
42_static_inline bool 42STATIC_INLINE bool
43equal(cube_t c1, cube_t c2) 43equal(cube_t c1, cube_t c2)
44{ 44{
45 uint8x16_t cmp_corner, cmp_edge; 45 uint8x16_t cmp_corner, cmp_edge;
@@ -62,7 +62,7 @@ equal(cube_t c1, cube_t c2)
62 return vgetq_lane_u64(cmp_result, 0) == ~0ULL && vgetq_lane_u64(cmp_result, 1) == ~0ULL; 62 return vgetq_lane_u64(cmp_result, 0) == ~0ULL && vgetq_lane_u64(cmp_result, 1) == ~0ULL;
63} 63}
64 64
65_static_inline cube_t 65STATIC_INLINE cube_t
66invertco(cube_t c) 66invertco(cube_t c)
67{ 67{
68 cube_t ret; 68 cube_t ret;
@@ -80,7 +80,7 @@ invertco(cube_t c)
80 return ret; 80 return ret;
81} 81}
82 82
83_static_inline cube_t 83STATIC_INLINE cube_t
84compose_edges(cube_t c1, cube_t c2) 84compose_edges(cube_t c1, cube_t c2)
85{ 85{
86 cube_t ret = {0}; 86 cube_t ret = {0};
@@ -88,7 +88,7 @@ compose_edges(cube_t c1, cube_t c2)
88 return ret; 88 return ret;
89} 89}
90 90
91_static_inline cube_t 91STATIC_INLINE cube_t
92compose_corners(cube_t c1, cube_t c2) 92compose_corners(cube_t c1, cube_t c2)
93{ 93{
94 cube_t ret = {0}; 94 cube_t ret = {0};
@@ -96,12 +96,12 @@ compose_corners(cube_t c1, cube_t c2)
96 return ret; 96 return ret;
97} 97}
98 98
99_static_inline uint8x16_t 99STATIC_INLINE uint8x16_t
100compose_edges_slim(uint8x16_t edge1, uint8x16_t edge2) 100compose_edges_slim(uint8x16_t edge1, uint8x16_t edge2)
101{ 101{
102 // Masks 102 // Masks
103 uint8x16_t p_bits = vdupq_n_u8(_pbits); 103 uint8x16_t p_bits = vdupq_n_u8(PBITS);
104 uint8x16_t eo_bit = vdupq_n_u8(_eobit); 104 uint8x16_t eo_bit = vdupq_n_u8(EOBIT);
105 105
106 // Find the index and permutation 106 // Find the index and permutation
107 uint8x16_t p = vandq_u8(edge2, p_bits); 107 uint8x16_t p = vandq_u8(edge2, p_bits);
@@ -120,14 +120,14 @@ compose_edges_slim(uint8x16_t edge1, uint8x16_t edge2)
120 return ret; 120 return ret;
121} 121}
122 122
123_static_inline uint8x16_t 123STATIC_INLINE uint8x16_t
124compose_corners_slim(uint8x16_t corner1, uint8x16_t corner2) 124compose_corners_slim(uint8x16_t corner1, uint8x16_t corner2)
125{ 125{
126 // Masks 126 // Masks
127 uint8x16_t p_bits = vdupq_n_u8(_pbits); 127 uint8x16_t p_bits = vdupq_n_u8(PBITS);
128 uint8x16_t cobits = vdupq_n_u8(_cobits); 128 uint8x16_t cobits = vdupq_n_u8(COBITS);
129 uint8x16_t cobits2 = vdupq_n_u8(_cobits2); 129 uint8x16_t cobits2 = vdupq_n_u8(COBITS_2);
130 uint8x16_t twist_cw = vdupq_n_u8(_ctwist_cw); 130 uint8x16_t twist_cw = vdupq_n_u8(CTWIST_CW);
131 131
132 // Find the index and permutation 132 // Find the index and permutation
133 uint8x16_t p = vandq_u8(corner2, p_bits); 133 uint8x16_t p = vandq_u8(corner2, p_bits);
@@ -148,7 +148,7 @@ compose_corners_slim(uint8x16_t corner1, uint8x16_t corner2)
148 return ret; 148 return ret;
149} 149}
150 150
151_static_inline cube_t 151STATIC_INLINE cube_t
152compose(cube_t c1, cube_t c2) 152compose(cube_t c1, cube_t c2)
153{ 153{
154 cube_t ret = {0}; 154 cube_t ret = {0};
@@ -159,7 +159,7 @@ compose(cube_t c1, cube_t c2)
159 return ret; 159 return ret;
160} 160}
161 161
162_static_inline cube_t 162STATIC_INLINE cube_t
163inverse(cube_t cube) 163inverse(cube_t cube)
164{ 164{
165 uint8_t i, piece, orien; 165 uint8_t i, piece, orien;
@@ -180,16 +180,16 @@ inverse(cube_t cube)
180 for (i = 0; i < 12; i++) 180 for (i = 0; i < 12; i++)
181 { 181 {
182 piece = edges[i]; 182 piece = edges[i];
183 orien = piece & _eobit; 183 orien = piece & EOBIT;
184 edge_result[piece & _pbits] = i | orien; 184 edge_result[piece & PBITS] = i | orien;
185 } 185 }
186 186
187 // Process the corners 187 // Process the corners
188 for (i = 0; i < 8; i++) 188 for (i = 0; i < 8; i++)
189 { 189 {
190 piece = corners[i]; 190 piece = corners[i];
191 orien = ((piece << 1) | (piece >> 1)) & _cobits2; 191 orien = ((piece << 1) | (piece >> 1)) & COBITS_2;
192 corner_result[piece & _pbits] = i | orien; 192 corner_result[piece & PBITS] = i | orien;
193 } 193 }
194 194
195 // Copy the results back to the NEON vectors 195 // Copy the results back to the NEON vectors
@@ -199,7 +199,7 @@ inverse(cube_t cube)
199 return ret; 199 return ret;
200} 200}
201 201
202_static_inline int64_t 202STATIC_INLINE int64_t
203coord_co(cube_t c) 203coord_co(cube_t c)
204{ 204{
205 // Temp array to store the NEON vector 205 // Temp array to store the NEON vector
@@ -210,12 +210,12 @@ coord_co(cube_t c)
210 int64_t ret; 210 int64_t ret;
211 211
212 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 3) 212 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 3)
213 ret += p * (mem[i] >> _coshift); 213 ret += p * (mem[i] >> COSHIFT);
214 214
215 return ret; 215 return ret;
216} 216}
217 217
218_static_inline int64_t 218STATIC_INLINE int64_t
219coord_csep(cube_t c) 219coord_csep(cube_t c)
220{ 220{
221 // Temp array to store the NEON vector 221 // Temp array to store the NEON vector
@@ -225,19 +225,19 @@ coord_csep(cube_t c)
225 int64_t ret = 0; 225 int64_t ret = 0;
226 int i, p; 226 int i, p;
227 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 2) 227 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 2)
228 ret += p * ((mem[i] & _csepbit) >> 2); 228 ret += p * ((mem[i] & CSEPBIT) >> 2);
229 229
230 return ret; 230 return ret;
231 return 0; 231 return 0;
232} 232}
233 233
234_static_inline int64_t 234STATIC_INLINE int64_t
235coord_cocsep(cube_t c) 235coord_cocsep(cube_t c)
236{ 236{
237 return (coord_co(c) << 7) + coord_csep(c); 237 return (coord_co(c) << 7) + coord_csep(c);
238} 238}
239 239
240_static_inline int64_t 240STATIC_INLINE int64_t
241coord_eo(cube_t c) 241coord_eo(cube_t c)
242{ 242{
243 int64_t ret = 0; 243 int64_t ret = 0;
@@ -249,13 +249,13 @@ coord_eo(cube_t c)
249 249
250 for (int i = 1; i < 12; i++, p *= 2) 250 for (int i = 1; i < 12; i++, p *= 2)
251 { 251 {
252 ret += p * (mem[i] >> _eoshift); 252 ret += p * (mem[i] >> EOSHIFT);
253 } 253 }
254 254
255 return ret; 255 return ret;
256} 256}
257 257
258_static_inline int64_t 258STATIC_INLINE int64_t
259coord_esep(cube_t c) 259coord_esep(cube_t c)
260{ 260{
261 int64_t i, j, jj, k, l, ret1, ret2, bit1, bit2, is1; 261 int64_t i, j, jj, k, l, ret1, ret2, bit1, bit2, is1;
@@ -266,8 +266,8 @@ coord_esep(cube_t c)
266 266
267 for (i = 0, j = 0, k = 4, l = 4, ret1 = 0, ret2 = 0; i < 12; i++) 267 for (i = 0, j = 0, k = 4, l = 4, ret1 = 0, ret2 = 0; i < 12; i++)
268 { 268 {
269 bit1 = (mem[i] & _esepbit1) >> 2; 269 bit1 = (mem[i] & ESEPBIT_1) >> 2;
270 bit2 = (mem[i] & _esepbit2) >> 3; 270 bit2 = (mem[i] & ESEPBIT_2) >> 3;
271 is1 = (1 - bit2) * bit1; 271 is1 = (1 - bit2) * bit1;
272 272
273 ret1 += bit2 * binomial[11 - i][k]; 273 ret1 += bit2 * binomial[11 - i][k];
@@ -282,19 +282,19 @@ coord_esep(cube_t c)
282 return ret1 * 70 + ret2; 282 return ret1 * 70 + ret2;
283} 283}
284 284
285_static_inline void 285STATIC_INLINE void
286copy_corners(cube_t *dst, cube_t src) 286copy_corners(cube_t *dst, cube_t src)
287{ 287{
288 dst->corner = src.corner; 288 dst->corner = src.corner;
289} 289}
290 290
291_static_inline void 291STATIC_INLINE void
292copy_edges(cube_t *dst, cube_t src) 292copy_edges(cube_t *dst, cube_t src)
293{ 293{
294 dst->edge = src.edge; 294 dst->edge = src.edge;
295} 295}
296 296
297_static_inline void 297STATIC_INLINE void
298set_eo(cube_t *cube, int64_t eo) 298set_eo(cube_t *cube, int64_t eo)
299{ 299{
300 // Temp array to store the NEON vector 300 // Temp array to store the NEON vector
@@ -306,16 +306,16 @@ set_eo(cube_t *cube, int64_t eo)
306 { 306 {
307 flip = eo % 2; 307 flip = eo % 2;
308 sum += flip; 308 sum += flip;
309 mem[i] = (mem[i] & ~_eobit) | (_eobit * flip); 309 mem[i] = (mem[i] & ~EOBIT) | (EOBIT * flip);
310 } 310 }
311 mem[0] = (mem[0] & ~_eobit) | (_eobit * (sum % 2)); 311 mem[0] = (mem[0] & ~EOBIT) | (EOBIT * (sum % 2));
312 312
313 // Copy the results back to the NEON vector 313 // Copy the results back to the NEON vector
314 cube->edge = vld1q_u8(mem); 314 cube->edge = vld1q_u8(mem);
315 return; 315 return;
316} 316}
317 317
318_static_inline cube_t 318STATIC_INLINE cube_t
319invcoord_esep(int64_t esep) 319invcoord_esep(int64_t esep)
320{ 320{
321 cube_t ret; 321 cube_t ret;
diff --git a/src/arch/portable.h b/src/arch/portable.h
index f6e5301..fdadb02 100644
--- a/src/arch/portable.h
+++ b/src/arch/portable.h
@@ -9,14 +9,14 @@
9#define solved static_cube( \ 9#define solved static_cube( \
10 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) 10 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
11 11
12_static void 12STATIC void
13pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12]) 13pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
14{ 14{
15 memcpy(c, cube->corner, 8); 15 memcpy(c, cube->corner, 8);
16 memcpy(e, cube->edge, 12); 16 memcpy(e, cube->edge, 12);
17} 17}
18 18
19_static_inline bool 19STATIC_INLINE bool
20equal(cube_t c1, cube_t c2) 20equal(cube_t c1, cube_t c2)
21{ 21{
22 uint8_t i; 22 uint8_t i;
@@ -31,7 +31,7 @@ equal(cube_t c1, cube_t c2)
31 return ret; 31 return ret;
32} 32}
33 33
34_static_inline cube_t 34STATIC_INLINE cube_t
35invertco(cube_t c) 35invertco(cube_t c)
36{ 36{
37 uint8_t i, piece, orien; 37 uint8_t i, piece, orien;
@@ -40,44 +40,44 @@ invertco(cube_t c)
40 ret = c; 40 ret = c;
41 for (i = 0; i < 8; i++) { 41 for (i = 0; i < 8; i++) {
42 piece = c.corner[i]; 42 piece = c.corner[i];
43 orien = ((piece << 1) | (piece >> 1)) & _cobits2; 43 orien = ((piece << 1) | (piece >> 1)) & COBITS_2;
44 ret.corner[i] = (piece & _pbits) | orien; 44 ret.corner[i] = (piece & PBITS) | orien;
45 } 45 }
46 46
47 return ret; 47 return ret;
48} 48}
49 49
50_static_inline void 50STATIC_INLINE void
51compose_edges_inplace(cube_t c1, cube_t c2, cube_t *ret) 51compose_edges_inplace(cube_t c1, cube_t c2, cube_t *ret)
52{ 52{
53 uint8_t i, piece1, piece2, p, orien; 53 uint8_t i, piece1, piece2, p, orien;
54 54
55 for (i = 0; i < 12; i++) { 55 for (i = 0; i < 12; i++) {
56 piece2 = c2.edge[i]; 56 piece2 = c2.edge[i];
57 p = piece2 & _pbits; 57 p = piece2 & PBITS;
58 piece1 = c1.edge[p]; 58 piece1 = c1.edge[p];
59 orien = (piece2 ^ piece1) & _eobit; 59 orien = (piece2 ^ piece1) & EOBIT;
60 ret->edge[i] = (piece1 & _pbits) | orien; 60 ret->edge[i] = (piece1 & PBITS) | orien;
61 } 61 }
62} 62}
63 63
64_static_inline void 64STATIC_INLINE void
65compose_corners_inplace(cube_t c1, cube_t c2, cube_t *ret) 65compose_corners_inplace(cube_t c1, cube_t c2, cube_t *ret)
66{ 66{
67 uint8_t i, piece1, piece2, p, orien, aux, auy; 67 uint8_t i, piece1, piece2, p, orien, aux, auy;
68 68
69 for (i = 0; i < 8; i++) { 69 for (i = 0; i < 8; i++) {
70 piece2 = c2.corner[i]; 70 piece2 = c2.corner[i];
71 p = piece2 & _pbits; 71 p = piece2 & PBITS;
72 piece1 = c1.corner[p]; 72 piece1 = c1.corner[p];
73 aux = (piece2 & _cobits) + (piece1 & _cobits); 73 aux = (piece2 & COBITS) + (piece1 & COBITS);
74 auy = (aux + _ctwist_cw) >> 2; 74 auy = (aux + CTWIST_CW) >> 2;
75 orien = (aux + auy) & _cobits2; 75 orien = (aux + auy) & COBITS_2;
76 ret->corner[i] = (piece1 & _pbits) | orien; 76 ret->corner[i] = (piece1 & PBITS) | orien;
77 } 77 }
78} 78}
79 79
80_static_inline cube_t 80STATIC_INLINE cube_t
81compose_edges(cube_t c1, cube_t c2) 81compose_edges(cube_t c1, cube_t c2)
82{ 82{
83 cube_t ret = zero; 83 cube_t ret = zero;
@@ -87,7 +87,7 @@ compose_edges(cube_t c1, cube_t c2)
87 return ret; 87 return ret;
88} 88}
89 89
90_static_inline cube_t 90STATIC_INLINE cube_t
91compose_corners(cube_t c1, cube_t c2) 91compose_corners(cube_t c1, cube_t c2)
92{ 92{
93 cube_t ret = zero; 93 cube_t ret = zero;
@@ -97,7 +97,7 @@ compose_corners(cube_t c1, cube_t c2)
97 return ret; 97 return ret;
98} 98}
99 99
100_static_inline cube_t 100STATIC_INLINE cube_t
101compose(cube_t c1, cube_t c2) 101compose(cube_t c1, cube_t c2)
102{ 102{
103 cube_t ret = zero; 103 cube_t ret = zero;
@@ -116,27 +116,27 @@ inverse(cube_t cube)
116 116
117 for (i = 0; i < 12; i++) { 117 for (i = 0; i < 12; i++) {
118 piece = cube.edge[i]; 118 piece = cube.edge[i];
119 orien = piece & _eobit; 119 orien = piece & EOBIT;
120 ret.edge[piece & _pbits] = i | orien; 120 ret.edge[piece & PBITS] = i | orien;
121 } 121 }
122 122
123 for (i = 0; i < 8; i++) { 123 for (i = 0; i < 8; i++) {
124 piece = cube.corner[i]; 124 piece = cube.corner[i];
125 orien = ((piece << 1) | (piece >> 1)) & _cobits2; 125 orien = ((piece << 1) | (piece >> 1)) & COBITS_2;
126 ret.corner[piece & _pbits] = i | orien; 126 ret.corner[piece & PBITS] = i | orien;
127 } 127 }
128 128
129 return ret; 129 return ret;
130} 130}
131 131
132_static_inline int64_t 132STATIC_INLINE int64_t
133coord_co(cube_t c) 133coord_co(cube_t c)
134{ 134{
135 int i, p; 135 int i, p;
136 int64_t ret; 136 int64_t ret;
137 137
138 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 3) 138 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 3)
139 ret += p * (c.corner[i] >> _coshift); 139 ret += p * (c.corner[i] >> COSHIFT);
140 140
141 return ret; 141 return ret;
142} 142}
@@ -148,32 +148,32 @@ Ignoring the last bit, we have a value up to 2^7, but not all values are
148possible. Encoding this as a number from 0 to C(8,4) would save about 40% 148possible. Encoding this as a number from 0 to C(8,4) would save about 40%
149of space, but we are not going to use this coordinate in large tables. 149of space, but we are not going to use this coordinate in large tables.
150*/ 150*/
151_static_inline int64_t 151STATIC_INLINE int64_t
152coord_csep(cube_t c) 152coord_csep(cube_t c)
153{ 153{
154 int i, p; 154 int i, p;
155 int64_t ret; 155 int64_t ret;
156 156
157 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 2) 157 for (ret = 0, i = 0, p = 1; i < 7; i++, p *= 2)
158 ret += p * ((c.corner[i] & _csepbit) >> 2); 158 ret += p * ((c.corner[i] & CSEPBIT) >> 2);
159 159
160 return ret; 160 return ret;
161} 161}
162 162
163_static_inline int64_t 163STATIC_INLINE int64_t
164coord_cocsep(cube_t c) 164coord_cocsep(cube_t c)
165{ 165{
166 return (coord_co(c) << 7) + coord_csep(c); 166 return (coord_co(c) << 7) + coord_csep(c);
167} 167}
168 168
169_static_inline int64_t 169STATIC_INLINE int64_t
170coord_eo(cube_t c) 170coord_eo(cube_t c)
171{ 171{
172 int i, p; 172 int i, p;
173 int64_t ret; 173 int64_t ret;
174 174
175 for (ret = 0, i = 1, p = 1; i < 12; i++, p *= 2) 175 for (ret = 0, i = 1, p = 1; i < 12; i++, p *= 2)
176 ret += p * (c.edge[i] >> _eoshift); 176 ret += p * (c.edge[i] >> EOSHIFT);
177 177
178 return ret; 178 return ret;
179} 179}
@@ -182,24 +182,24 @@ coord_eo(cube_t c)
182We encode the edge separation as a number from 0 to C(12,4)*C(8,4). 182We encode the edge separation as a number from 0 to C(12,4)*C(8,4).
183It can be seen as the composition of two "subset index" coordinates. 183It can be seen as the composition of two "subset index" coordinates.
184*/ 184*/
185_static_inline int64_t 185STATIC_INLINE int64_t
186coord_esep(cube_t c) 186coord_esep(cube_t c)
187{ 187{
188 int64_t i, j, jj, k, l, ret1, ret2, bit1, bit2, is1; 188 int64_t i, j, jj, k, l, ret1, ret2, bit1, bit2, is1;
189 189
190 for (i = 0, j = 0, k = 4, l = 4, ret1 = 0, ret2 = 0; i < 12; i++) { 190 for (i = 0, j = 0, k = 4, l = 4, ret1 = 0, ret2 = 0; i < 12; i++) {
191 /* Simple version: 191 /* Simple version:
192 if (c.edge[i] & _esepbit2) { 192 if (c.edge[i] & ESEPBIT_2) {
193 ret1 += binomial[11-i][k--]; 193 ret1 += binomial[11-i][k--];
194 } else { 194 } else {
195 if (c.edge[i] & _esepbit1) 195 if (c.edge[i] & ESEPBIT_1)
196 ret2 += binomial[7-j][l--]; 196 ret2 += binomial[7-j][l--];
197 j++; 197 j++;
198 } 198 }
199 */ 199 */
200 200
201 bit1 = (c.edge[i] & _esepbit1) >> 2; 201 bit1 = (c.edge[i] & ESEPBIT_1) >> 2;
202 bit2 = (c.edge[i] & _esepbit2) >> 3; 202 bit2 = (c.edge[i] & ESEPBIT_2) >> 3;
203 is1 = (1 - bit2) * bit1; 203 is1 = (1 - bit2) * bit1;
204 204
205 ret1 += bit2 * binomial[11-i][k]; 205 ret1 += bit2 * binomial[11-i][k];
@@ -214,19 +214,19 @@ coord_esep(cube_t c)
214 return ret1 * 70 + ret2; 214 return ret1 * 70 + ret2;
215} 215}
216 216
217_static_inline void 217STATIC_INLINE void
218copy_corners(cube_t *dest, cube_t src) 218copy_corners(cube_t *dest, cube_t src)
219{ 219{
220 memcpy(&dest->corner, src.corner, sizeof(src.corner)); 220 memcpy(&dest->corner, src.corner, sizeof(src.corner));
221} 221}
222 222
223_static_inline void 223STATIC_INLINE void
224copy_edges(cube_t *dest, cube_t src) 224copy_edges(cube_t *dest, cube_t src)
225{ 225{
226 memcpy(&dest->edge, src.edge, sizeof(src.edge)); 226 memcpy(&dest->edge, src.edge, sizeof(src.edge));
227} 227}
228 228
229_static_inline void 229STATIC_INLINE void
230set_eo(cube_t *cube, int64_t eo) 230set_eo(cube_t *cube, int64_t eo)
231{ 231{
232 uint8_t i, sum, flip; 232 uint8_t i, sum, flip;
@@ -234,12 +234,12 @@ set_eo(cube_t *cube, int64_t eo)
234 for (sum = 0, i = 1; i < 12; i++, eo >>= 1) { 234 for (sum = 0, i = 1; i < 12; i++, eo >>= 1) {
235 flip = eo % 2; 235 flip = eo % 2;
236 sum += flip; 236 sum += flip;
237 cube->edge[i] = (cube->edge[i] & ~_eobit) | (_eobit * flip); 237 cube->edge[i] = (cube->edge[i] & ~EOBIT) | (EOBIT * flip);
238 } 238 }
239 cube->edge[0] = (cube->edge[0] & ~_eobit) | (_eobit * (sum % 2)); 239 cube->edge[0] = (cube->edge[0] & ~EOBIT) | (EOBIT * (sum % 2));
240} 240}
241 241
242_static_inline cube_t 242STATIC_INLINE cube_t
243invcoord_esep(int64_t esep) 243invcoord_esep(int64_t esep)
244{ 244{
245 cube_t ret; 245 cube_t ret;
diff --git a/src/core/constant_cubes.h b/src/core/constant_cubes.h
index b7748d8..e6a9e88 100644
--- a/src/core/constant_cubes.h
+++ b/src/core/constant_cubes.h
@@ -1,229 +1,229 @@
1#define _move_cube_U static_cube( \ 1#define MOVE_CUBE_U static_cube( \
2 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11) 2 5, 4, 2, 3, 0, 1, 6, 7, 4, 5, 2, 3, 1, 0, 6, 7, 8, 9, 10, 11)
3#define _move_cube_U2 static_cube( \ 3#define MOVE_CUBE_U2 static_cube( \
4 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11) 4 1, 0, 2, 3, 5, 4, 6, 7, 1, 0, 2, 3, 5, 4, 6, 7, 8, 9, 10, 11)
5#define _move_cube_U3 static_cube( \ 5#define MOVE_CUBE_U3 static_cube( \
6 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11) 6 4, 5, 2, 3, 1, 0, 6, 7, 5, 4, 2, 3, 0, 1, 6, 7, 8, 9, 10, 11)
7#define _move_cube_D static_cube( \ 7#define MOVE_CUBE_D static_cube( \
8 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11) 8 0, 1, 7, 6, 4, 5, 2, 3, 0, 1, 7, 6, 4, 5, 2, 3, 8, 9, 10, 11)
9#define _move_cube_D2 static_cube( \ 9#define MOVE_CUBE_D2 static_cube( \
10 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11) 10 0, 1, 3, 2, 4, 5, 7, 6, 0, 1, 3, 2, 4, 5, 7, 6, 8, 9, 10, 11)
11#define _move_cube_D3 static_cube( \ 11#define MOVE_CUBE_D3 static_cube( \
12 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11) 12 0, 1, 6, 7, 4, 5, 3, 2, 0, 1, 6, 7, 4, 5, 3, 2, 8, 9, 10, 11)
13#define _move_cube_R static_cube( \ 13#define MOVE_CUBE_R static_cube( \
14 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4) 14 70, 1, 2, 69, 4, 32, 35, 7, 0, 1, 2, 3, 8, 5, 6, 11, 7, 9, 10, 4)
15#define _move_cube_R2 static_cube( \ 15#define MOVE_CUBE_R2 static_cube( \
16 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8) 16 3, 1, 2, 0, 4, 6, 5, 7, 0, 1, 2, 3, 7, 5, 6, 4, 11, 9, 10, 8)
17#define _move_cube_R3 static_cube( \ 17#define MOVE_CUBE_R3 static_cube( \
18 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7) 18 69, 1, 2, 70, 4, 35, 32, 7, 0, 1, 2, 3, 11, 5, 6, 8, 4, 9, 10, 7)
19#define _move_cube_L static_cube( \ 19#define MOVE_CUBE_L static_cube( \
20 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11) 20 0, 71, 68, 3, 33, 5, 6, 34, 0, 1, 2, 3, 4, 10, 9, 7, 8, 5, 6, 11)
21#define _move_cube_L2 static_cube( \ 21#define MOVE_CUBE_L2 static_cube( \
22 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11) 22 0, 2, 1, 3, 7, 5, 6, 4, 0, 1, 2, 3, 4, 6, 5, 7, 8, 10, 9, 11)
23#define _move_cube_L3 static_cube( \ 23#define MOVE_CUBE_L3 static_cube( \
24 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11) 24 0, 68, 71, 3, 34, 5, 6, 33, 0, 1, 2, 3, 4, 9, 10, 7, 8, 6, 5, 11)
25#define _move_cube_F static_cube( \ 25#define MOVE_CUBE_F static_cube( \
26 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11) 26 36, 1, 38, 3, 66, 5, 64, 7, 25, 1, 2, 24, 4, 5, 6, 7, 16, 19, 10, 11)
27#define _move_cube_F2 static_cube( \ 27#define MOVE_CUBE_F2 static_cube( \
28 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11) 28 2, 1, 0, 3, 6, 5, 4, 7, 3, 1, 2, 0, 4, 5, 6, 7, 9, 8, 10, 11)
29#define _move_cube_F3 static_cube( \ 29#define MOVE_CUBE_F3 static_cube( \
30 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11) 30 38, 1, 36, 3, 64, 5, 66, 7, 24, 1, 2, 25, 4, 5, 6, 7, 19, 16, 10, 11)
31#define _move_cube_B static_cube( \ 31#define MOVE_CUBE_B static_cube( \
32 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18) 32 0, 37, 2, 39, 4, 67, 6, 65, 0, 27, 26, 3, 4, 5, 6, 7, 8, 9, 17, 18)
33#define _move_cube_B2 static_cube( \ 33#define MOVE_CUBE_B2 static_cube( \
34 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10) 34 0, 3, 2, 1, 4, 7, 6, 5, 0, 2, 1, 3, 4, 5, 6, 7, 8, 9, 11, 10)
35#define _move_cube_B3 static_cube( \ 35#define MOVE_CUBE_B3 static_cube( \
36 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17) 36 0, 39, 2, 37, 4, 65, 6, 67, 0, 26, 27, 3, 4, 5, 6, 7, 8, 9, 18, 17)
37 37
38#define _trans_cube_UFr static_cube( \ 38#define TRANS_CUBE_UFr static_cube( \
39 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) 39 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
40#define _trans_cube_UFr_inverse static_cube( \ 40#define TRANS_CUBE_UFr_INVERSE static_cube( \
41 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11) 41 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
42#define _trans_cube_ULr static_cube( \ 42#define TRANS_CUBE_ULr static_cube( \
43 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) 43 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24)
44#define _trans_cube_ULr_inverse static_cube( \ 44#define TRANS_CUBE_ULr_INVERSE static_cube( \
45 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) 45 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26)
46#define _trans_cube_UBr static_cube( \ 46#define TRANS_CUBE_UBr static_cube( \
47 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) 47 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9)
48#define _trans_cube_UBr_inverse static_cube( \ 48#define TRANS_CUBE_UBr_INVERSE static_cube( \
49 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9) 49 1, 0, 3, 2, 5, 4, 7, 6, 1, 0, 3, 2, 5, 4, 7, 6, 10, 11, 8, 9)
50#define _trans_cube_URr static_cube( \ 50#define TRANS_CUBE_URr static_cube( \
51 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26) 51 5, 4, 6, 7, 0, 1, 3, 2, 4, 5, 6, 7, 1, 0, 3, 2, 27, 24, 25, 26)
52#define _trans_cube_URr_inverse static_cube( \ 52#define TRANS_CUBE_URr_INVERSE static_cube( \
53 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24) 53 4, 5, 7, 6, 1, 0, 2, 3, 5, 4, 7, 6, 0, 1, 2, 3, 25, 26, 27, 24)
54#define _trans_cube_DFr static_cube( \ 54#define TRANS_CUBE_DFr static_cube( \
55 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) 55 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10)
56#define _trans_cube_DFr_inverse static_cube( \ 56#define TRANS_CUBE_DFr_INVERSE static_cube( \
57 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10) 57 2, 3, 0, 1, 6, 7, 4, 5, 3, 2, 1, 0, 6, 7, 4, 5, 9, 8, 11, 10)
58#define _trans_cube_DLr static_cube( \ 58#define TRANS_CUBE_DLr static_cube( \
59 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) 59 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27)
60#define _trans_cube_DLr_inverse static_cube( \ 60#define TRANS_CUBE_DLr_INVERSE static_cube( \
61 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27) 61 7, 6, 4, 5, 2, 3, 1, 0, 6, 7, 4, 5, 2, 3, 0, 1, 26, 25, 24, 27)
62#define _trans_cube_DBr static_cube( \ 62#define TRANS_CUBE_DBr static_cube( \
63 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) 63 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8)
64#define _trans_cube_DBr_inverse static_cube( \ 64#define TRANS_CUBE_DBr_INVERSE static_cube( \
65 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8) 65 3, 2, 1, 0, 7, 6, 5, 4, 2, 3, 0, 1, 7, 6, 5, 4, 11, 10, 9, 8)
66#define _trans_cube_DRr static_cube( \ 66#define TRANS_CUBE_DRr static_cube( \
67 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) 67 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25)
68#define _trans_cube_DRr_inverse static_cube( \ 68#define TRANS_CUBE_DRr_INVERSE static_cube( \
69 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25) 69 6, 7, 5, 4, 3, 2, 0, 1, 7, 6, 5, 4, 3, 2, 1, 0, 24, 27, 26, 25)
70#define _trans_cube_RUr static_cube( \ 70#define TRANS_CUBE_RUr static_cube( \
71 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) 71 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3)
72#define _trans_cube_RUr_inverse static_cube( \ 72#define TRANS_CUBE_RUr_INVERSE static_cube( \
73 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) 73 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21)
74#define _trans_cube_RFr static_cube( \ 74#define TRANS_CUBE_RFr static_cube( \
75 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) 75 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18)
76#define _trans_cube_RFr_inverse static_cube( \ 76#define TRANS_CUBE_RFr_INVERSE static_cube( \
77 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) 77 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17)
78#define _trans_cube_RDr static_cube( \ 78#define TRANS_CUBE_RDr static_cube( \
79 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) 79 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1)
80#define _trans_cube_RDr_inverse static_cube( \ 80#define TRANS_CUBE_RDr_INVERSE static_cube( \
81 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) 81 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20)
82#define _trans_cube_RBr static_cube( \ 82#define TRANS_CUBE_RBr static_cube( \
83 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) 83 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16)
84#define _trans_cube_RBr_inverse static_cube( \ 84#define TRANS_CUBE_RBr_INVERSE static_cube( \
85 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16) 85 37, 38, 39, 36, 67, 64, 65, 66, 27, 24, 25, 26, 20, 23, 22, 21, 17, 18, 19, 16)
86#define _trans_cube_LUr static_cube( \ 86#define TRANS_CUBE_LUr static_cube( \
87 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) 87 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2)
88#define _trans_cube_LUr_inverse static_cube( \ 88#define TRANS_CUBE_LUr_INVERSE static_cube( \
89 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) 89 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23)
90#define _trans_cube_LFr static_cube( \ 90#define TRANS_CUBE_LFr static_cube( \
91 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17) 91 36, 39, 38, 37, 66, 65, 64, 67, 25, 26, 27, 24, 21, 22, 23, 20, 16, 19, 18, 17)
92#define _trans_cube_LFr_inverse static_cube( \ 92#define TRANS_CUBE_LFr_INVERSE static_cube( \
93 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18) 93 38, 37, 36, 39, 64, 67, 66, 65, 24, 27, 26, 25, 23, 20, 21, 22, 19, 16, 17, 18)
94#define _trans_cube_LDr static_cube( \ 94#define TRANS_CUBE_LDr static_cube( \
95 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) 95 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0)
96#define _trans_cube_LDr_inverse static_cube( \ 96#define TRANS_CUBE_LDr_INVERSE static_cube( \
97 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) 97 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22)
98#define _trans_cube_LBr static_cube( \ 98#define TRANS_CUBE_LBr static_cube( \
99 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) 99 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19)
100#define _trans_cube_LBr_inverse static_cube( \ 100#define TRANS_CUBE_LBr_INVERSE static_cube( \
101 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19) 101 39, 36, 37, 38, 65, 66, 67, 64, 26, 25, 24, 27, 22, 21, 20, 23, 18, 17, 16, 19)
102#define _trans_cube_FUr static_cube( \ 102#define TRANS_CUBE_FUr static_cube( \
103 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) 103 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6)
104#define _trans_cube_FUr_inverse static_cube( \ 104#define TRANS_CUBE_FUr_INVERSE static_cube( \
105 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6) 105 68, 70, 69, 71, 32, 34, 33, 35, 16, 19, 18, 17, 9, 8, 11, 10, 5, 4, 7, 6)
106#define _trans_cube_FRr static_cube( \ 106#define TRANS_CUBE_FRr static_cube( \
107 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21) 107 32, 34, 35, 33, 70, 68, 69, 71, 8, 9, 10, 11, 16, 19, 18, 17, 20, 23, 22, 21)
108#define _trans_cube_FRr_inverse static_cube( \ 108#define TRANS_CUBE_FRr_INVERSE static_cube( \
109 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3) 109 64, 67, 65, 66, 37, 38, 36, 39, 20, 23, 22, 21, 24, 27, 26, 25, 0, 1, 2, 3)
110#define _trans_cube_FDr static_cube( \ 110#define TRANS_CUBE_FDr static_cube( \
111 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) 111 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4)
112#define _trans_cube_FDr_inverse static_cube( \ 112#define TRANS_CUBE_FDr_INVERSE static_cube( \
113 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) 113 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7)
114#define _trans_cube_FLr static_cube( \ 114#define TRANS_CUBE_FLr static_cube( \
115 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23) 115 34, 32, 33, 35, 68, 70, 71, 69, 9, 8, 11, 10, 19, 16, 17, 18, 22, 21, 20, 23)
116#define _trans_cube_FLr_inverse static_cube( \ 116#define TRANS_CUBE_FLr_INVERSE static_cube( \
117 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2) 117 65, 66, 64, 67, 36, 39, 37, 38, 21, 22, 23, 20, 26, 25, 24, 27, 1, 0, 3, 2)
118#define _trans_cube_BUr static_cube( \ 118#define TRANS_CUBE_BUr static_cube( \
119 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7) 119 69, 71, 68, 70, 33, 35, 32, 34, 17, 18, 19, 16, 11, 10, 9, 8, 4, 5, 6, 7)
120#define _trans_cube_BUr_inverse static_cube( \ 120#define TRANS_CUBE_BUr_INVERSE static_cube( \
121 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4) 121 70, 68, 71, 69, 34, 32, 35, 33, 19, 16, 17, 18, 8, 9, 10, 11, 7, 6, 5, 4)
122#define _trans_cube_BRr static_cube( \ 122#define TRANS_CUBE_BRr static_cube( \
123 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22) 123 35, 33, 32, 34, 69, 71, 70, 68, 11, 10, 9, 8, 18, 17, 16, 19, 23, 20, 21, 22)
124#define _trans_cube_BRr_inverse static_cube( \ 124#define TRANS_CUBE_BRr_INVERSE static_cube( \
125 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0) 125 66, 65, 67, 64, 39, 36, 38, 37, 22, 21, 20, 23, 25, 26, 27, 24, 3, 2, 1, 0)
126#define _trans_cube_BDr static_cube( \ 126#define TRANS_CUBE_BDr static_cube( \
127 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) 127 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5)
128#define _trans_cube_BDr_inverse static_cube( \ 128#define TRANS_CUBE_BDr_INVERSE static_cube( \
129 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5) 129 71, 69, 70, 68, 35, 33, 34, 32, 18, 17, 16, 19, 10, 11, 8, 9, 6, 7, 4, 5)
130#define _trans_cube_BLr static_cube( \ 130#define TRANS_CUBE_BLr static_cube( \
131 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20) 131 33, 35, 34, 32, 71, 69, 68, 70, 10, 11, 8, 9, 17, 18, 19, 16, 21, 22, 23, 20)
132#define _trans_cube_BLr_inverse static_cube( \ 132#define TRANS_CUBE_BLr_INVERSE static_cube( \
133 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1) 133 67, 64, 66, 65, 38, 37, 39, 36, 23, 20, 21, 22, 27, 24, 25, 26, 2, 3, 0, 1)
134#define _trans_cube_UFm static_cube( \ 134#define TRANS_CUBE_UFm static_cube( \
135 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) 135 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10)
136#define _trans_cube_UFm_inverse static_cube( \ 136#define TRANS_CUBE_UFm_INVERSE static_cube( \
137 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10) 137 4, 5, 6, 7, 0, 1, 2, 3, 0, 1, 2, 3, 5, 4, 7, 6, 9, 8, 11, 10)
138#define _trans_cube_ULm static_cube( \ 138#define TRANS_CUBE_ULm static_cube( \
139 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) 139 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25)
140#define _trans_cube_ULm_inverse static_cube( \ 140#define TRANS_CUBE_ULm_INVERSE static_cube( \
141 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25) 141 0, 1, 3, 2, 5, 4, 6, 7, 4, 5, 6, 7, 0, 1, 2, 3, 24, 27, 26, 25)
142#define _trans_cube_UBm static_cube( \ 142#define TRANS_CUBE_UBm static_cube( \
143 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) 143 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8)
144#define _trans_cube_UBm_inverse static_cube( \ 144#define TRANS_CUBE_UBm_INVERSE static_cube( \
145 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8) 145 5, 4, 7, 6, 1, 0, 3, 2, 1, 0, 3, 2, 4, 5, 6, 7, 11, 10, 9, 8)
146#define _trans_cube_URm static_cube( \ 146#define TRANS_CUBE_URm static_cube( \
147 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) 147 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27)
148#define _trans_cube_URm_inverse static_cube( \ 148#define TRANS_CUBE_URm_INVERSE static_cube( \
149 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27) 149 1, 0, 2, 3, 4, 5, 7, 6, 5, 4, 7, 6, 1, 0, 3, 2, 26, 25, 24, 27)
150#define _trans_cube_DFm static_cube( \ 150#define TRANS_CUBE_DFm static_cube( \
151 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) 151 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11)
152#define _trans_cube_DFm_inverse static_cube( \ 152#define TRANS_CUBE_DFm_INVERSE static_cube( \
153 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11) 153 6, 7, 4, 5, 2, 3, 0, 1, 3, 2, 1, 0, 7, 6, 5, 4, 8, 9, 10, 11)
154#define _trans_cube_DLm static_cube( \ 154#define TRANS_CUBE_DLm static_cube( \
155 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) 155 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26)
156#define _trans_cube_DLm_inverse static_cube( \ 156#define TRANS_CUBE_DLm_INVERSE static_cube( \
157 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) 157 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24)
158#define _trans_cube_DBm static_cube( \ 158#define TRANS_CUBE_DBm static_cube( \
159 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) 159 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9)
160#define _trans_cube_DBm_inverse static_cube( \ 160#define TRANS_CUBE_DBm_INVERSE static_cube( \
161 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9) 161 7, 6, 5, 4, 3, 2, 1, 0, 2, 3, 0, 1, 6, 7, 4, 5, 10, 11, 8, 9)
162#define _trans_cube_DRm static_cube( \ 162#define TRANS_CUBE_DRm static_cube( \
163 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24) 163 2, 3, 1, 0, 7, 6, 4, 5, 6, 7, 4, 5, 3, 2, 1, 0, 25, 26, 27, 24)
164#define _trans_cube_DRm_inverse static_cube( \ 164#define TRANS_CUBE_DRm_INVERSE static_cube( \
165 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26) 165 3, 2, 0, 1, 6, 7, 5, 4, 7, 6, 5, 4, 2, 3, 0, 1, 27, 24, 25, 26)
166#define _trans_cube_RUm static_cube( \ 166#define TRANS_CUBE_RUm static_cube( \
167 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) 167 68, 71, 69, 70, 33, 34, 32, 35, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3)
168#define _trans_cube_RUm_inverse static_cube( \ 168#define TRANS_CUBE_RUm_INVERSE static_cube( \
169 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) 169 70, 68, 69, 71, 32, 34, 35, 33, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22)
170#define _trans_cube_RFm static_cube( \ 170#define TRANS_CUBE_RFm static_cube( \
171 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) 171 34, 33, 32, 35, 68, 71, 70, 69, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18)
172#define _trans_cube_RFm_inverse static_cube( \ 172#define TRANS_CUBE_RFm_INVERSE static_cube( \
173 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18) 173 66, 65, 64, 67, 36, 39, 38, 37, 25, 26, 27, 24, 22, 21, 20, 23, 19, 16, 17, 18)
174#define _trans_cube_RDm static_cube( \ 174#define TRANS_CUBE_RDm static_cube( \
175 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) 175 71, 68, 70, 69, 34, 33, 35, 32, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1)
176#define _trans_cube_RDm_inverse static_cube( \ 176#define TRANS_CUBE_RDm_INVERSE static_cube( \
177 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) 177 71, 69, 68, 70, 33, 35, 34, 32, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23)
178#define _trans_cube_RBm static_cube( \ 178#define TRANS_CUBE_RBm static_cube( \
179 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) 179 33, 34, 35, 32, 71, 68, 69, 70, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16)
180#define _trans_cube_RBm_inverse static_cube( \ 180#define TRANS_CUBE_RBm_INVERSE static_cube( \
181 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) 181 67, 64, 65, 66, 37, 38, 39, 36, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19)
182#define _trans_cube_LUm static_cube( \ 182#define TRANS_CUBE_LUm static_cube( \
183 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) 183 69, 70, 68, 71, 32, 35, 33, 34, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2)
184#define _trans_cube_LUm_inverse static_cube( \ 184#define TRANS_CUBE_LUm_INVERSE static_cube( \
185 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) 185 68, 70, 71, 69, 34, 32, 33, 35, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20)
186#define _trans_cube_LFm static_cube( \ 186#define TRANS_CUBE_LFm static_cube( \
187 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) 187 32, 35, 34, 33, 70, 69, 68, 71, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17)
188#define _trans_cube_LFm_inverse static_cube( \ 188#define TRANS_CUBE_LFm_INVERSE static_cube( \
189 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17) 189 64, 67, 66, 65, 38, 37, 36, 39, 24, 27, 26, 25, 20, 23, 22, 21, 16, 19, 18, 17)
190#define _trans_cube_LDm static_cube( \ 190#define TRANS_CUBE_LDm static_cube( \
191 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) 191 70, 69, 71, 68, 35, 32, 34, 33, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0)
192#define _trans_cube_LDm_inverse static_cube( \ 192#define TRANS_CUBE_LDm_INVERSE static_cube( \
193 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) 193 69, 71, 70, 68, 35, 33, 32, 34, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21)
194#define _trans_cube_LBm static_cube( \ 194#define TRANS_CUBE_LBm static_cube( \
195 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19) 195 35, 32, 33, 34, 69, 70, 71, 68, 27, 24, 25, 26, 23, 20, 21, 22, 18, 17, 16, 19)
196#define _trans_cube_LBm_inverse static_cube( \ 196#define TRANS_CUBE_LBm_INVERSE static_cube( \
197 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16) 197 65, 66, 67, 64, 39, 36, 37, 38, 26, 25, 24, 27, 21, 22, 23, 20, 17, 18, 19, 16)
198#define _trans_cube_FUm static_cube( \ 198#define TRANS_CUBE_FUm static_cube( \
199 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) 199 64, 66, 65, 67, 36, 38, 37, 39, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7)
200#define _trans_cube_FUm_inverse static_cube( \ 200#define TRANS_CUBE_FUm_INVERSE static_cube( \
201 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7) 201 32, 34, 33, 35, 68, 70, 69, 71, 16, 19, 18, 17, 8, 9, 10, 11, 4, 5, 6, 7)
202#define _trans_cube_FRm static_cube( \ 202#define TRANS_CUBE_FRm static_cube( \
203 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20) 203 36, 38, 39, 37, 66, 64, 65, 67, 9, 8, 11, 10, 16, 19, 18, 17, 21, 22, 23, 20)
204#define _trans_cube_FRm_inverse static_cube( \ 204#define TRANS_CUBE_FRm_INVERSE static_cube( \
205 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2) 205 37, 38, 36, 39, 64, 67, 65, 66, 20, 23, 22, 21, 27, 24, 25, 26, 1, 0, 3, 2)
206#define _trans_cube_FDm static_cube( \ 206#define TRANS_CUBE_FDm static_cube( \
207 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) 207 66, 64, 67, 65, 38, 36, 39, 37, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5)
208#define _trans_cube_FDm_inverse static_cube( \ 208#define TRANS_CUBE_FDm_INVERSE static_cube( \
209 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) 209 33, 35, 32, 34, 69, 71, 68, 70, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6)
210#define _trans_cube_FLm static_cube( \ 210#define TRANS_CUBE_FLm static_cube( \
211 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22) 211 38, 36, 37, 39, 64, 66, 67, 65, 8, 9, 10, 11, 19, 16, 17, 18, 23, 20, 21, 22)
212#define _trans_cube_FLm_inverse static_cube( \ 212#define TRANS_CUBE_FLm_INVERSE static_cube( \
213 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3) 213 36, 39, 37, 38, 65, 66, 64, 67, 21, 22, 23, 20, 25, 26, 27, 24, 0, 1, 2, 3)
214#define _trans_cube_BUm static_cube( \ 214#define TRANS_CUBE_BUm static_cube( \
215 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6) 215 65, 67, 64, 66, 37, 39, 36, 38, 17, 18, 19, 16, 10, 11, 8, 9, 5, 4, 7, 6)
216#define _trans_cube_BUm_inverse static_cube( \ 216#define TRANS_CUBE_BUm_INVERSE static_cube( \
217 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5) 217 34, 32, 35, 33, 70, 68, 71, 69, 19, 16, 17, 18, 9, 8, 11, 10, 6, 7, 4, 5)
218#define _trans_cube_BRm static_cube( \ 218#define TRANS_CUBE_BRm static_cube( \
219 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23) 219 39, 37, 36, 38, 65, 67, 66, 64, 10, 11, 8, 9, 18, 17, 16, 19, 22, 21, 20, 23)
220#define _trans_cube_BRm_inverse static_cube( \ 220#define TRANS_CUBE_BRm_INVERSE static_cube( \
221 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1) 221 39, 36, 38, 37, 66, 65, 67, 64, 22, 21, 20, 23, 26, 25, 24, 27, 2, 3, 0, 1)
222#define _trans_cube_BDm static_cube( \ 222#define TRANS_CUBE_BDm static_cube( \
223 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) 223 67, 65, 66, 64, 39, 37, 38, 36, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4)
224#define _trans_cube_BDm_inverse static_cube( \ 224#define TRANS_CUBE_BDm_INVERSE static_cube( \
225 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4) 225 35, 33, 34, 32, 71, 69, 70, 68, 18, 17, 16, 19, 11, 10, 9, 8, 7, 6, 5, 4)
226#define _trans_cube_BLm static_cube( \ 226#define TRANS_CUBE_BLm static_cube( \
227 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21) 227 37, 39, 38, 36, 67, 65, 64, 66, 11, 10, 9, 8, 17, 18, 19, 16, 20, 23, 22, 21)
228#define _trans_cube_BLm_inverse static_cube( \ 228#define TRANS_CUBE_BLm_INVERSE static_cube( \
229 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0) 229 38, 37, 39, 36, 67, 64, 66, 65, 23, 20, 21, 22, 24, 27, 26, 25, 3, 2, 1, 0)
diff --git a/src/core/cube.h b/src/core/cube.h
index df5161a..1bb8bd0 100644
--- a/src/core/cube.h
+++ b/src/core/cube.h
@@ -1,13 +1,13 @@
1_static cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]); 1STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]);
2_static cube_t solvedcube(void); 2STATIC cube_t solvedcube(void);
3_static bool isconsistent(cube_t); 3STATIC bool isconsistent(cube_t);
4_static bool issolvable(cube_t); 4STATIC bool issolvable(cube_t);
5_static bool issolved(cube_t); 5STATIC bool issolved(cube_t);
6_static bool iserror(cube_t); 6STATIC bool iserror(cube_t);
7_static void getcube_fix(int64_t *, int64_t *, int64_t *, int64_t *); 7STATIC void getcube_fix(int64_t *, int64_t *, int64_t *, int64_t *);
8_static cube_t getcube(int64_t, int64_t, int64_t, int64_t); 8STATIC cube_t getcube(int64_t, int64_t, int64_t, int64_t);
9 9
10_static cube_t 10STATIC cube_t
11cubefromarray(uint8_t c[static 8], uint8_t e[static 12]) 11cubefromarray(uint8_t c[static 8], uint8_t e[static 12])
12{ 12{
13 return static_cube( 13 return static_cube(
@@ -16,13 +16,13 @@ cubefromarray(uint8_t c[static 8], uint8_t e[static 12])
16 e[8], e[9], e[10], e[11]); 16 e[8], e[9], e[10], e[11]);
17} 17}
18 18
19_static cube_t 19STATIC cube_t
20solvedcube(void) 20solvedcube(void)
21{ 21{
22 return solved; 22 return solved;
23} 23}
24 24
25_static bool 25STATIC bool
26isconsistent(cube_t cube) 26isconsistent(cube_t cube)
27{ 27{
28 uint8_t i, p, e, piece, corner[8], edge[12]; 28 uint8_t i, p, e, piece, corner[8], edge[12];
@@ -34,11 +34,11 @@ isconsistent(cube_t cube)
34 found[i] = false; 34 found[i] = false;
35 for (i = 0; i < 12; i++) { 35 for (i = 0; i < 12; i++) {
36 piece = edge[i]; 36 piece = edge[i];
37 p = piece & _pbits; 37 p = piece & PBITS;
38 e = piece & _eobit; 38 e = piece & EOBIT;
39 if (p >= 12) 39 if (p >= 12)
40 goto inconsistent_ep; 40 goto inconsistent_ep;
41 if (e != 0 && e != _eobit) 41 if (e != 0 && e != EOBIT)
42 goto inconsistent_eo; 42 goto inconsistent_eo;
43 found[p] = true; 43 found[p] = true;
44 } 44 }
@@ -50,11 +50,11 @@ isconsistent(cube_t cube)
50 found[i] = false; 50 found[i] = false;
51 for (i = 0; i < 8; i++) { 51 for (i = 0; i < 8; i++) {
52 piece = corner[i]; 52 piece = corner[i];
53 p = piece & _pbits; 53 p = piece & PBITS;
54 e = piece & _cobits; 54 e = piece & COBITS;
55 if (p >= 8) 55 if (p >= 8)
56 goto inconsistent_cp; 56 goto inconsistent_cp;
57 if (e != 0 && e != _ctwist_cw && e != _ctwist_ccw) 57 if (e != 0 && e != CTWIST_CW && e != CTWIST_CCW)
58 goto inconsistent_co; 58 goto inconsistent_co;
59 found[p] = true; 59 found[p] = true;
60 } 60 }
@@ -78,7 +78,7 @@ inconsistent_co:
78 return false; 78 return false;
79} 79}
80 80
81_static bool 81STATIC bool
82issolvable(cube_t cube) 82issolvable(cube_t cube)
83{ 83{
84 uint8_t i, eo, co, piece, edge[12], corner[8], ep[12], cp[8]; 84 uint8_t i, eo, co, piece, edge[12], corner[8], ep[12], cp[8];
@@ -88,9 +88,9 @@ issolvable(cube_t cube)
88 88
89 pieces(&cube, corner, edge); 89 pieces(&cube, corner, edge);
90 for (i = 0; i < 12; i++) 90 for (i = 0; i < 12; i++)
91 ep[i] = edge[i] & _pbits; 91 ep[i] = edge[i] & PBITS;
92 for (i = 0; i < 8; i++) 92 for (i = 0; i < 8; i++)
93 cp[i] = corner[i] & _pbits; 93 cp[i] = corner[i] & PBITS;
94 94
95 if (permsign(ep, 12) != permsign(cp, 8)) 95 if (permsign(ep, 12) != permsign(cp, 8))
96 goto issolvable_parity; 96 goto issolvable_parity;
@@ -98,7 +98,7 @@ issolvable(cube_t cube)
98 eo = 0; 98 eo = 0;
99 for (i = 0; i < 12; i++) { 99 for (i = 0; i < 12; i++) {
100 piece = edge[i]; 100 piece = edge[i];
101 eo += (piece & _eobit) >> _eoshift; 101 eo += (piece & EOBIT) >> EOSHIFT;
102 } 102 }
103 if (eo % 2 != 0) 103 if (eo % 2 != 0)
104 goto issolvable_eo; 104 goto issolvable_eo;
@@ -106,7 +106,7 @@ issolvable(cube_t cube)
106 co = 0; 106 co = 0;
107 for (i = 0; i < 8; i++) { 107 for (i = 0; i < 8; i++) {
108 piece = corner[i]; 108 piece = corner[i];
109 co += (piece & _cobits) >> _coshift; 109 co += (piece & COBITS) >> COSHIFT;
110 } 110 }
111 if (co % 3 != 0) 111 if (co % 3 != 0)
112 goto issolvable_co; 112 goto issolvable_co;
@@ -136,15 +136,15 @@ iserror(cube_t cube)
136 return equal(cube, zero); 136 return equal(cube, zero);
137} 137}
138 138
139_static void 139STATIC void
140getcube_fix(int64_t *ep, int64_t *eo, int64_t *cp, int64_t *co) 140getcube_fix(int64_t *ep, int64_t *eo, int64_t *cp, int64_t *co)
141{ 141{
142 uint8_t e[12], c[8], coarr[8]; 142 uint8_t e[12], c[8], coarr[8];
143 143
144 *ep = (*ep % _12f + _12f) % _12f; 144 *ep = (*ep % FACT_12 + FACT_12) % FACT_12;
145 *eo = (*eo % _2p11 + _2p11) % _2p11; 145 *eo = (*eo % POW_2_11 + POW_2_11) % POW_2_11;
146 *cp = (*cp % _8f + _8f) % _8f; 146 *cp = (*cp % FACT_8 + FACT_8) % FACT_8;
147 *co = (*cp % _3p7 + _3p7) % _3p7; 147 *co = (*cp % POW_3_7 + POW_3_7) % POW_3_7;
148 148
149 indextoperm(*ep, 12, e); 149 indextoperm(*ep, 12, e);
150 indextoperm(*cp, 8, c); 150 indextoperm(*cp, 8, c);
@@ -158,24 +158,24 @@ getcube_fix(int64_t *ep, int64_t *eo, int64_t *cp, int64_t *co)
158 } 158 }
159} 159}
160 160
161_static cube_t 161STATIC cube_t
162getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co) 162getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co)
163{ 163{
164 uint8_t i, earr[12], carr[8], eoarr[12], coarr[8]; 164 uint8_t i, earr[12], carr[8], eoarr[12], coarr[8];
165 165
166 sumzerotodigits(eo, 12, 2, eoarr); 166 sumzerotodigits(eo, 12, 2, eoarr);
167 DBG_ASSERT(eoarr[0] != _error, zero, "Error making EO"); 167 DBG_ASSERT(eoarr[0] != UINT8_ERROR, zero, "Error making EO");
168 indextoperm(ep, 12, earr); 168 indextoperm(ep, 12, earr);
169 DBG_ASSERT(earr[0] != _error, zero, "Error making EP"); 169 DBG_ASSERT(earr[0] != UINT8_ERROR, zero, "Error making EP");
170 for (i = 0; i < 12; i++) 170 for (i = 0; i < 12; i++)
171 earr[i] |= eoarr[i] << _eoshift; 171 earr[i] |= eoarr[i] << EOSHIFT;
172 172
173 sumzerotodigits(co, 8, 3, coarr); 173 sumzerotodigits(co, 8, 3, coarr);
174 DBG_ASSERT(coarr[0] != _error, zero, "Error making CO"); 174 DBG_ASSERT(coarr[0] != UINT8_ERROR, zero, "Error making CO");
175 indextoperm(cp, 8, carr); 175 indextoperm(cp, 8, carr);
176 DBG_ASSERT(carr[0] != _error, zero, "Error making CP"); 176 DBG_ASSERT(carr[0] != UINT8_ERROR, zero, "Error making CP");
177 for (i = 0; i < 8; i++) 177 for (i = 0; i < 8; i++)
178 carr[i] |= coarr[i] << _coshift; 178 carr[i] |= coarr[i] << COSHIFT;
179 179
180 return cubefromarray(carr, earr); 180 return cubefromarray(carr, earr);
181} 181}
diff --git a/src/core/io_cube.h b/src/core/io_cube.h
index 956494d..cb0e4c7 100644
--- a/src/core/io_cube.h
+++ b/src/core/io_cube.h
@@ -1,23 +1,23 @@
1_static uint8_t readco(const char *); 1STATIC uint8_t readco(const char *);
2_static uint8_t readcp(const char *); 2STATIC uint8_t readcp(const char *);
3_static uint8_t readeo(const char *); 3STATIC uint8_t readeo(const char *);
4_static uint8_t readep(const char *); 4STATIC uint8_t readep(const char *);
5_static cube_t readcube_B32(const char *); 5STATIC cube_t readcube_B32(const char *);
6_static cube_t readcube_H48(const char *); 6STATIC cube_t readcube_H48(const char *);
7_static uint8_t readpiece_LST(const char **); 7STATIC uint8_t readpiece_LST(const char **);
8_static cube_t readcube_LST(const char *); 8STATIC cube_t readcube_LST(const char *);
9 9
10_static int writepiece_LST(uint8_t, char *); 10STATIC int writepiece_LST(uint8_t, char *);
11_static void writecube_B32(cube_t, char *); 11STATIC void writecube_B32(cube_t, char *);
12_static void writecube_H48(cube_t, char *); 12STATIC void writecube_H48(cube_t, char *);
13_static void writecube_LST(cube_t, char *); 13STATIC void writecube_LST(cube_t, char *);
14 14
15_static uint8_t b32toedge(char); 15STATIC uint8_t b32toedge(char);
16_static uint8_t b32tocorner(char); 16STATIC uint8_t b32tocorner(char);
17_static char edgetob32(uint8_t); 17STATIC char edgetob32(uint8_t);
18_static char cornertob32(uint8_t); 18STATIC char cornertob32(uint8_t);
19 19
20_static struct { 20STATIC struct {
21 const char *name; 21 const char *name;
22 cube_t (*read)(const char *); 22 cube_t (*read)(const char *);
23 void (*write)(cube_t, char *); 23 void (*write)(cube_t, char *);
@@ -72,21 +72,21 @@ writecube_error:
72 buf[len+1] = '\0'; 72 buf[len+1] = '\0';
73} 73}
74 74
75_static uint8_t 75STATIC uint8_t
76readco(const char *str) 76readco(const char *str)
77{ 77{
78 if (*str == '0') 78 if (*str == '0')
79 return 0; 79 return 0;
80 if (*str == '1') 80 if (*str == '1')
81 return _ctwist_cw; 81 return CTWIST_CW;
82 if (*str == '2') 82 if (*str == '2')
83 return _ctwist_ccw; 83 return CTWIST_CCW;
84 84
85 LOG("Error reading CO\n"); 85 LOG("Error reading CO\n");
86 return _error; 86 return UINT8_ERROR;
87} 87}
88 88
89_static uint8_t 89STATIC uint8_t
90readcp(const char *str) 90readcp(const char *str)
91{ 91{
92 uint8_t c; 92 uint8_t c;
@@ -97,22 +97,22 @@ readcp(const char *str)
97 return c; 97 return c;
98 98
99 LOG("Error reading CP\n"); 99 LOG("Error reading CP\n");
100 return _error; 100 return UINT8_ERROR;
101} 101}
102 102
103_static uint8_t 103STATIC uint8_t
104readeo(const char *str) 104readeo(const char *str)
105{ 105{
106 if (*str == '0') 106 if (*str == '0')
107 return 0; 107 return 0;
108 if (*str == '1') 108 if (*str == '1')
109 return _eflip; 109 return EFLIP;
110 110
111 LOG("Error reading EO\n"); 111 LOG("Error reading EO\n");
112 return _error; 112 return UINT8_ERROR;
113} 113}
114 114
115_static uint8_t 115STATIC uint8_t
116readep(const char *str) 116readep(const char *str)
117{ 117{
118 uint8_t e; 118 uint8_t e;
@@ -122,10 +122,10 @@ readep(const char *str)
122 return e; 122 return e;
123 123
124 LOG("Error reading EP\n"); 124 LOG("Error reading EP\n");
125 return _error; 125 return UINT8_ERROR;
126} 126}
127 127
128_static cube_t 128STATIC cube_t
129readcube_B32(const char *buf) 129readcube_B32(const char *buf)
130{ 130{
131 int i; 131 int i;
@@ -146,7 +146,7 @@ readcube_B32(const char *buf)
146 return cubefromarray(c, e); 146 return cubefromarray(c, e);
147} 147}
148 148
149_static cube_t 149STATIC cube_t
150readcube_H48(const char *buf) 150readcube_H48(const char *buf)
151{ 151{
152 int i; 152 int i;
@@ -158,10 +158,10 @@ readcube_H48(const char *buf)
158 for (i = 0; i < 12; i++) { 158 for (i = 0; i < 12; i++) {
159 while (*b == ' ' || *b == '\t' || *b == '\n') 159 while (*b == ' ' || *b == '\t' || *b == '\n')
160 b++; 160 b++;
161 if ((piece = readep(b)) == _error) 161 if ((piece = readep(b)) == UINT8_ERROR)
162 return zero; 162 return zero;
163 b += 2; 163 b += 2;
164 if ((orient = readeo(b)) == _error) 164 if ((orient = readeo(b)) == UINT8_ERROR)
165 return zero; 165 return zero;
166 b++; 166 b++;
167 e[i] = piece | orient; 167 e[i] = piece | orient;
@@ -169,10 +169,10 @@ readcube_H48(const char *buf)
169 for (i = 0; i < 8; i++) { 169 for (i = 0; i < 8; i++) {
170 while (*b == ' ' || *b == '\t' || *b == '\n') 170 while (*b == ' ' || *b == '\t' || *b == '\n')
171 b++; 171 b++;
172 if ((piece = readcp(b)) == _error) 172 if ((piece = readcp(b)) == UINT8_ERROR)
173 return zero; 173 return zero;
174 b += 3; 174 b += 3;
175 if ((orient = readco(b)) == _error) 175 if ((orient = readco(b)) == UINT8_ERROR)
176 return zero; 176 return zero;
177 b++; 177 b++;
178 c[i] = piece | orient; 178 c[i] = piece | orient;
@@ -181,7 +181,7 @@ readcube_H48(const char *buf)
181 return cubefromarray(c, e); 181 return cubefromarray(c, e);
182} 182}
183 183
184_static uint8_t 184STATIC uint8_t
185readpiece_LST(const char **b) 185readpiece_LST(const char **b)
186{ 186{
187 uint8_t ret; 187 uint8_t ret;
@@ -195,10 +195,10 @@ readpiece_LST(const char **b)
195 ret = ret * 10 + (**b) - '0'; 195 ret = ret * 10 + (**b) - '0';
196 } 196 }
197 197
198 return read ? ret : _error; 198 return read ? ret : UINT8_ERROR;
199} 199}
200 200
201_static cube_t 201STATIC cube_t
202readcube_LST(const char *buf) 202readcube_LST(const char *buf)
203{ 203{
204 int i; 204 int i;
@@ -213,7 +213,7 @@ readcube_LST(const char *buf)
213 return cubefromarray(c, e); 213 return cubefromarray(c, e);
214} 214}
215 215
216_static int 216STATIC int
217writepiece_LST(uint8_t piece, char *buf) 217writepiece_LST(uint8_t piece, char *buf)
218{ 218{
219 char digits[3]; 219 char digits[3];
@@ -237,7 +237,7 @@ writepiece_LST(uint8_t piece, char *buf)
237 return len+2; 237 return len+2;
238} 238}
239 239
240_static void 240STATIC void
241writecube_B32(cube_t cube, char *buf) 241writecube_B32(cube_t cube, char *buf)
242{ 242{
243 int i; 243 int i;
@@ -256,7 +256,7 @@ writecube_B32(cube_t cube, char *buf)
256 buf[21] = '\0'; 256 buf[21] = '\0';
257} 257}
258 258
259_static void 259STATIC void
260writecube_H48(cube_t cube, char *buf) 260writecube_H48(cube_t cube, char *buf)
261{ 261{
262 uint8_t piece, perm, orient, corner[8], edge[12]; 262 uint8_t piece, perm, orient, corner[8], edge[12];
@@ -266,8 +266,8 @@ writecube_H48(cube_t cube, char *buf)
266 266
267 for (i = 0; i < 12; i++) { 267 for (i = 0; i < 12; i++) {
268 piece = edge[i]; 268 piece = edge[i];
269 perm = piece & _pbits; 269 perm = piece & PBITS;
270 orient = (piece & _eobit) >> _eoshift; 270 orient = (piece & EOBIT) >> EOSHIFT;
271 buf[4*i ] = edgestr[perm][0]; 271 buf[4*i ] = edgestr[perm][0];
272 buf[4*i + 1] = edgestr[perm][1]; 272 buf[4*i + 1] = edgestr[perm][1];
273 buf[4*i + 2] = orient + '0'; 273 buf[4*i + 2] = orient + '0';
@@ -275,8 +275,8 @@ writecube_H48(cube_t cube, char *buf)
275 } 275 }
276 for (i = 0; i < 8; i++) { 276 for (i = 0; i < 8; i++) {
277 piece = corner[i]; 277 piece = corner[i];
278 perm = piece & _pbits; 278 perm = piece & PBITS;
279 orient = (piece & _cobits) >> _coshift; 279 orient = (piece & COBITS) >> COSHIFT;
280 buf[48 + 5*i ] = cornerstr[perm][0]; 280 buf[48 + 5*i ] = cornerstr[perm][0];
281 buf[48 + 5*i + 1] = cornerstr[perm][1]; 281 buf[48 + 5*i + 1] = cornerstr[perm][1];
282 buf[48 + 5*i + 2] = cornerstr[perm][2]; 282 buf[48 + 5*i + 2] = cornerstr[perm][2];
@@ -287,7 +287,7 @@ writecube_H48(cube_t cube, char *buf)
287 buf[48+39] = '\0'; 287 buf[48+39] = '\0';
288} 288}
289 289
290_static void 290STATIC void
291writecube_LST(cube_t cube, char *buf) 291writecube_LST(cube_t cube, char *buf)
292{ 292{
293 int i; 293 int i;
@@ -310,7 +310,7 @@ writecube_LST(cube_t cube, char *buf)
310 *(buf+ptr-2) = 0; 310 *(buf+ptr-2) = 0;
311} 311}
312 312
313_static uint8_t 313STATIC uint8_t
314b32toedge(char c) 314b32toedge(char c)
315{ 315{
316 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'f'))) 316 if (!((c >= 'A' && c <= 'Z') || (c >= 'a' && c <= 'f')))
@@ -319,7 +319,7 @@ b32toedge(char c)
319 return c <= 'Z' ? (uint8_t)(c - 'A') : (uint8_t)(c - 'a') + 26; 319 return c <= 'Z' ? (uint8_t)(c - 'A') : (uint8_t)(c - 'a') + 26;
320} 320}
321 321
322_static uint8_t 322STATIC uint8_t
323b32tocorner(char c) { 323b32tocorner(char c) {
324 uint8_t val; 324 uint8_t val;
325 325
@@ -331,13 +331,13 @@ b32tocorner(char c) {
331 return (val & 7) | ((val & 24) << 2); 331 return (val & 7) | ((val & 24) << 2);
332} 332}
333 333
334_static char 334STATIC char
335edgetob32(uint8_t edge) 335edgetob32(uint8_t edge)
336{ 336{
337 return edge < 26 ? 'A' + (char)edge : 'a' + (char)(edge - 26); 337 return edge < 26 ? 'A' + (char)edge : 'a' + (char)(edge - 26);
338} 338}
339 339
340_static char 340STATIC char
341cornertob32(uint8_t corner) 341cornertob32(uint8_t corner)
342{ 342{
343 uint8_t val; 343 uint8_t val;
diff --git a/src/core/io_moves.h b/src/core/io_moves.h
index eb6290e..a49a38b 100644
--- a/src/core/io_moves.h
+++ b/src/core/io_moves.h
@@ -1,29 +1,29 @@
1_static uint8_t readmove(char); 1STATIC uint8_t readmove(char);
2_static uint8_t readmodifier(char); 2STATIC uint8_t readmodifier(char);
3_static int writemoves(uint8_t *, int, char *); 3STATIC int writemoves(uint8_t *, int, char *);
4 4
5_static uint8_t 5STATIC uint8_t
6readmove(char c) 6readmove(char c)
7{ 7{
8 switch (c) { 8 switch (c) {
9 case 'U': 9 case 'U':
10 return _move_U; 10 return MOVE_U;
11 case 'D': 11 case 'D':
12 return _move_D; 12 return MOVE_D;
13 case 'R': 13 case 'R':
14 return _move_R; 14 return MOVE_R;
15 case 'L': 15 case 'L':
16 return _move_L; 16 return MOVE_L;
17 case 'F': 17 case 'F':
18 return _move_F; 18 return MOVE_F;
19 case 'B': 19 case 'B':
20 return _move_B; 20 return MOVE_B;
21 default: 21 default:
22 return _error; 22 return UINT8_ERROR;
23 } 23 }
24} 24}
25 25
26_static uint8_t 26STATIC uint8_t
27readmodifier(char c) 27readmodifier(char c)
28{ 28{
29 switch (c) { 29 switch (c) {
@@ -38,7 +38,7 @@ readmodifier(char c)
38 } 38 }
39} 39}
40 40
41_static int 41STATIC int
42writemoves(uint8_t *m, int n, char *buf) 42writemoves(uint8_t *m, int n, char *buf)
43{ 43{
44 int i; 44 int i;
diff --git a/src/core/io_trans.h b/src/core/io_trans.h
index 7187b7a..d91e9a2 100644
--- a/src/core/io_trans.h
+++ b/src/core/io_trans.h
@@ -1,7 +1,7 @@
1_static uint8_t readtrans(const char *); 1STATIC uint8_t readtrans(const char *);
2_static void writetrans(uint8_t, char *); 2STATIC void writetrans(uint8_t, char *);
3 3
4_static uint8_t 4STATIC uint8_t
5readtrans(const char *buf) 5readtrans(const char *buf)
6{ 6{
7 uint8_t t; 7 uint8_t t;
@@ -11,10 +11,10 @@ readtrans(const char *buf)
11 return t; 11 return t;
12 12
13 LOG("readtrans error\n"); 13 LOG("readtrans error\n");
14 return _error; 14 return UINT8_ERROR;
15} 15}
16 16
17_static void 17STATIC void
18writetrans(uint8_t t, char *buf) 18writetrans(uint8_t t, char *buf)
19{ 19{
20 if (t >= 48) 20 if (t >= 48)
diff --git a/src/core/moves.h b/src/core/moves.h
index 71ef470..45cd804 100644
--- a/src/core/moves.h
+++ b/src/core/moves.h
@@ -1,22 +1,22 @@
1#define _move(M, c) compose(c, _move_cube_ ## M) 1#define _move(M, c) compose(c, MOVE_CUBE_ ## M)
2#define _premove(M, c) compose(_move_cube_ ## M, c) 2#define _premove(M, c) compose(MOVE_CUBE_ ## M, c)
3 3
4_static_inline bool allowednextmove(uint8_t *, uint8_t); 4STATIC_INLINE bool allowednextmove(uint8_t *, uint8_t);
5 5
6_static_inline uint8_t inverse_trans(uint8_t); 6STATIC_INLINE uint8_t inverse_trans(uint8_t);
7_static_inline uint8_t movebase(uint8_t); 7STATIC_INLINE uint8_t movebase(uint8_t);
8_static_inline uint8_t moveaxis(uint8_t); 8STATIC_INLINE uint8_t moveaxis(uint8_t);
9_static_inline uint32_t disable_moves(uint32_t, uint8_t); 9STATIC_INLINE uint32_t disable_moves(uint32_t, uint8_t);
10 10
11_static cube_t move(cube_t, uint8_t); 11STATIC cube_t move(cube_t, uint8_t);
12_static cube_t premove(cube_t, uint8_t); 12STATIC cube_t premove(cube_t, uint8_t);
13_static uint8_t inverse_move(uint8_t); 13STATIC uint8_t inverse_move(uint8_t);
14_static void invertmoves(uint8_t *, uint8_t, uint8_t *); 14STATIC void invertmoves(uint8_t *, uint8_t, uint8_t *);
15 15
16_static cube_t applymoves(cube_t, const char *); 16STATIC cube_t applymoves(cube_t, const char *);
17_static cube_t frommoves(const char *); 17STATIC cube_t frommoves(const char *);
18 18
19_static bool 19STATIC bool
20allowednextmove(uint8_t *moves, uint8_t n) 20allowednextmove(uint8_t *moves, uint8_t n)
21{ 21{
22 uint8_t base[3], axis[3]; 22 uint8_t base[3], axis[3];
@@ -41,69 +41,69 @@ allowednextmove(uint8_t *moves, uint8_t n)
41 return axis[1] != axis[2] || base[0] != base[2]; 41 return axis[1] != axis[2] || base[0] != base[2];
42} 42}
43 43
44_static_inline uint32_t 44STATIC_INLINE uint32_t
45disable_moves(uint32_t current_result, uint8_t base_index) 45disable_moves(uint32_t current_result, uint8_t base_index)
46{ 46{
47 return current_result & ~(7 << base_index); 47 return current_result & ~(7 << base_index);
48} 48}
49 49
50_static_inline uint8_t 50STATIC_INLINE uint8_t
51inverse_trans(uint8_t t) 51inverse_trans(uint8_t t)
52{ 52{
53 return inverse_trans_table[t]; 53 return inverse_trans_table[t];
54} 54}
55 55
56_static_inline uint8_t 56STATIC_INLINE uint8_t
57movebase(uint8_t move) 57movebase(uint8_t move)
58{ 58{
59 return move / 3; 59 return move / 3;
60} 60}
61 61
62_static_inline uint8_t 62STATIC_INLINE uint8_t
63moveaxis(uint8_t move) 63moveaxis(uint8_t move)
64{ 64{
65 return move / 6; 65 return move / 6;
66} 66}
67 67
68_static cube_t 68STATIC cube_t
69move(cube_t c, uint8_t m) 69move(cube_t c, uint8_t m)
70{ 70{
71 switch (m) { 71 switch (m) {
72 case _move_U: 72 case MOVE_U:
73 return _move(U, c); 73 return _move(U, c);
74 case _move_U2: 74 case MOVE_U2:
75 return _move(U2, c); 75 return _move(U2, c);
76 case _move_U3: 76 case MOVE_U3:
77 return _move(U3, c); 77 return _move(U3, c);
78 case _move_D: 78 case MOVE_D:
79 return _move(D, c); 79 return _move(D, c);
80 case _move_D2: 80 case MOVE_D2:
81 return _move(D2, c); 81 return _move(D2, c);
82 case _move_D3: 82 case MOVE_D3:
83 return _move(D3, c); 83 return _move(D3, c);
84 case _move_R: 84 case MOVE_R:
85 return _move(R, c); 85 return _move(R, c);
86 case _move_R2: 86 case MOVE_R2:
87 return _move(R2, c); 87 return _move(R2, c);
88 case _move_R3: 88 case MOVE_R3:
89 return _move(R3, c); 89 return _move(R3, c);
90 case _move_L: 90 case MOVE_L:
91 return _move(L, c); 91 return _move(L, c);
92 case _move_L2: 92 case MOVE_L2:
93 return _move(L2, c); 93 return _move(L2, c);
94 case _move_L3: 94 case MOVE_L3:
95 return _move(L3, c); 95 return _move(L3, c);
96 case _move_F: 96 case MOVE_F:
97 return _move(F, c); 97 return _move(F, c);
98 case _move_F2: 98 case MOVE_F2:
99 return _move(F2, c); 99 return _move(F2, c);
100 case _move_F3: 100 case MOVE_F3:
101 return _move(F3, c); 101 return _move(F3, c);
102 case _move_B: 102 case MOVE_B:
103 return _move(B, c); 103 return _move(B, c);
104 case _move_B2: 104 case MOVE_B2:
105 return _move(B2, c); 105 return _move(B2, c);
106 case _move_B3: 106 case MOVE_B3:
107 return _move(B3, c); 107 return _move(B3, c);
108 default: 108 default:
109 LOG("move error, unknown move\n"); 109 LOG("move error, unknown move\n");
@@ -111,45 +111,45 @@ move(cube_t c, uint8_t m)
111 } 111 }
112} 112}
113 113
114_static cube_t 114STATIC cube_t
115premove(cube_t c, uint8_t m) 115premove(cube_t c, uint8_t m)
116{ 116{
117 switch (m) { 117 switch (m) {
118 case _move_U: 118 case MOVE_U:
119 return _premove(U3, c); 119 return _premove(U3, c);
120 case _move_U2: 120 case MOVE_U2:
121 return _premove(U2, c); 121 return _premove(U2, c);
122 case _move_U3: 122 case MOVE_U3:
123 return _premove(U, c); 123 return _premove(U, c);
124 case _move_D: 124 case MOVE_D:
125 return _premove(D3, c); 125 return _premove(D3, c);
126 case _move_D2: 126 case MOVE_D2:
127 return _premove(D2, c); 127 return _premove(D2, c);
128 case _move_D3: 128 case MOVE_D3:
129 return _premove(D, c); 129 return _premove(D, c);
130 case _move_R: 130 case MOVE_R:
131 return _premove(R3, c); 131 return _premove(R3, c);
132 case _move_R2: 132 case MOVE_R2:
133 return _premove(R2, c); 133 return _premove(R2, c);
134 case _move_R3: 134 case MOVE_R3:
135 return _premove(R, c); 135 return _premove(R, c);
136 case _move_L: 136 case MOVE_L:
137 return _premove(L3, c); 137 return _premove(L3, c);
138 case _move_L2: 138 case MOVE_L2:
139 return _premove(L2, c); 139 return _premove(L2, c);
140 case _move_L3: 140 case MOVE_L3:
141 return _premove(L, c); 141 return _premove(L, c);
142 case _move_F: 142 case MOVE_F:
143 return _premove(F3, c); 143 return _premove(F3, c);
144 case _move_F2: 144 case MOVE_F2:
145 return _premove(F2, c); 145 return _premove(F2, c);
146 case _move_F3: 146 case MOVE_F3:
147 return _premove(F, c); 147 return _premove(F, c);
148 case _move_B: 148 case MOVE_B:
149 return _premove(B3, c); 149 return _premove(B3, c);
150 case _move_B2: 150 case MOVE_B2:
151 return _premove(B2, c); 151 return _premove(B2, c);
152 case _move_B3: 152 case MOVE_B3:
153 return _premove(B, c); 153 return _premove(B, c);
154 default: 154 default:
155 LOG("move error, unknown move\n"); 155 LOG("move error, unknown move\n");
@@ -157,13 +157,13 @@ premove(cube_t c, uint8_t m)
157 } 157 }
158} 158}
159 159
160_static uint8_t 160STATIC uint8_t
161inverse_move(uint8_t m) 161inverse_move(uint8_t m)
162{ 162{
163 return m - 2 * (m % 3) + 2; 163 return m - 2 * (m % 3) + 2;
164} 164}
165 165
166_static void 166STATIC void
167invertmoves(uint8_t *moves, uint8_t nmoves, uint8_t *ret) 167invertmoves(uint8_t *moves, uint8_t nmoves, uint8_t *ret)
168{ 168{
169 uint8_t i; 169 uint8_t i;
@@ -172,7 +172,7 @@ invertmoves(uint8_t *moves, uint8_t nmoves, uint8_t *ret)
172 ret[i] = inverse_move(moves[nmoves - i - 1]); 172 ret[i] = inverse_move(moves[nmoves - i - 1]);
173} 173}
174 174
175_static cube_t 175STATIC cube_t
176applymoves(cube_t cube, const char *buf) 176applymoves(cube_t cube, const char *buf)
177{ 177{
178 uint8_t r, m; 178 uint8_t r, m;
@@ -186,7 +186,7 @@ applymoves(cube_t cube, const char *buf)
186 b++; 186 b++;
187 if (*b == '\0') 187 if (*b == '\0')
188 goto applymoves_finish; 188 goto applymoves_finish;
189 if ((r = readmove(*b)) == _error) 189 if ((r = readmove(*b)) == UINT8_ERROR)
190 goto applymoves_error; 190 goto applymoves_error;
191 if ((m = readmodifier(*(b+1))) != 0) 191 if ((m = readmodifier(*(b+1))) != 0)
192 b++; 192 b++;
@@ -201,7 +201,7 @@ applymoves_error:
201 return zero; 201 return zero;
202} 202}
203 203
204_static cube_t 204STATIC cube_t
205frommoves(const char *buf) 205frommoves(const char *buf)
206{ 206{
207 return applymoves(solved, buf); 207 return applymoves(solved, buf);
diff --git a/src/core/transform.h b/src/core/transform.h
index fa7ce59..a792c25 100644
--- a/src/core/transform.h
+++ b/src/core/transform.h
@@ -1,132 +1,111 @@
1/* TODO: remove these macros, if the below works */ 1STATIC cube_t transform_edges(cube_t, uint8_t);
2 2STATIC cube_t transform_corners(cube_t, uint8_t);
3#define _trans_edges_rotation(T, c) \ 3STATIC cube_t transform(cube_t, uint8_t);
4 compose_edges(compose_edges(_trans_cube_ ## T, c), \ 4STATIC cube_t applytrans(cube_t, const char *);
5 _trans_cube_ ## T ## _inverse)
6#define _trans_edges_mirrored(T, c) _trans_edges_rotation(T, c)
7
8#define _trans_corners_rotation(T, c) \
9 compose_corners(compose_corners(_trans_cube_ ## T, c), \
10 _trans_cube_ ## T ## _inverse)
11#define _trans_corners_mirrored(T, c) \
12 invertco(compose_corners( \
13 compose_corners(_trans_cube_ ## T, c), _trans_cube_ ## T ## _inverse))
14
15#define _trans_rotation(T, c) \
16 compose(compose(_trans_cube_ ## T, c), \
17 _trans_cube_ ## T ## _inverse)
18#define _trans_mirrored(T, c) \
19 invertco(compose(compose(_trans_cube_ ## T, c), \
20 _trans_cube_ ## T ## _inverse))
21
22_static cube_t transform_edges(cube_t, uint8_t);
23_static cube_t transform_corners(cube_t, uint8_t);
24_static cube_t transform(cube_t, uint8_t);
25_static cube_t applytrans(cube_t, const char *);
26 5
27static cube_t cube_trans_table[48] = { 6static cube_t cube_trans_table[48] = {
28 [_trans_UFr] = _trans_cube_UFr, 7 [TRANS_UFr] = TRANS_CUBE_UFr,
29 [_trans_UFm] = _trans_cube_UFm, 8 [TRANS_UFm] = TRANS_CUBE_UFm,
30 [_trans_ULr] = _trans_cube_URr, 9 [TRANS_ULr] = TRANS_CUBE_URr,
31 [_trans_ULm] = _trans_cube_ULm, 10 [TRANS_ULm] = TRANS_CUBE_ULm,
32 [_trans_UBr] = _trans_cube_UBr, 11 [TRANS_UBr] = TRANS_CUBE_UBr,
33 [_trans_UBm] = _trans_cube_UBm, 12 [TRANS_UBm] = TRANS_CUBE_UBm,
34 [_trans_URr] = _trans_cube_ULr, 13 [TRANS_URr] = TRANS_CUBE_ULr,
35 [_trans_URm] = _trans_cube_URm, 14 [TRANS_URm] = TRANS_CUBE_URm,
36 [_trans_DFr] = _trans_cube_DFr, 15 [TRANS_DFr] = TRANS_CUBE_DFr,
37 [_trans_DFm] = _trans_cube_DFm, 16 [TRANS_DFm] = TRANS_CUBE_DFm,
38 [_trans_DLr] = _trans_cube_DLr, 17 [TRANS_DLr] = TRANS_CUBE_DLr,
39 [_trans_DLm] = _trans_cube_DRm, 18 [TRANS_DLm] = TRANS_CUBE_DRm,
40 [_trans_DBr] = _trans_cube_DBr, 19 [TRANS_DBr] = TRANS_CUBE_DBr,
41 [_trans_DBm] = _trans_cube_DBm, 20 [TRANS_DBm] = TRANS_CUBE_DBm,
42 [_trans_DRr] = _trans_cube_DRr, 21 [TRANS_DRr] = TRANS_CUBE_DRr,
43 [_trans_DRm] = _trans_cube_DLm, 22 [TRANS_DRm] = TRANS_CUBE_DLm,
44 [_trans_RUr] = _trans_cube_FRr, 23 [TRANS_RUr] = TRANS_CUBE_FRr,
45 [_trans_RUm] = _trans_cube_FLm, 24 [TRANS_RUm] = TRANS_CUBE_FLm,
46 [_trans_RFr] = _trans_cube_LFr, 25 [TRANS_RFr] = TRANS_CUBE_LFr,
47 [_trans_RFm] = _trans_cube_RFm, 26 [TRANS_RFm] = TRANS_CUBE_RFm,
48 [_trans_RDr] = _trans_cube_BLr, 27 [TRANS_RDr] = TRANS_CUBE_BLr,
49 [_trans_RDm] = _trans_cube_BRm, 28 [TRANS_RDm] = TRANS_CUBE_BRm,
50 [_trans_RBr] = _trans_cube_RBr, 29 [TRANS_RBr] = TRANS_CUBE_RBr,
51 [_trans_RBm] = _trans_cube_LBm, 30 [TRANS_RBm] = TRANS_CUBE_LBm,
52 [_trans_LUr] = _trans_cube_FLr, 31 [TRANS_LUr] = TRANS_CUBE_FLr,
53 [_trans_LUm] = _trans_cube_FRm, 32 [TRANS_LUm] = TRANS_CUBE_FRm,
54 [_trans_LFr] = _trans_cube_RFr, 33 [TRANS_LFr] = TRANS_CUBE_RFr,
55 [_trans_LFm] = _trans_cube_LFm, 34 [TRANS_LFm] = TRANS_CUBE_LFm,
56 [_trans_LDr] = _trans_cube_BRr, 35 [TRANS_LDr] = TRANS_CUBE_BRr,
57 [_trans_LDm] = _trans_cube_BLm, 36 [TRANS_LDm] = TRANS_CUBE_BLm,
58 [_trans_LBr] = _trans_cube_LBr, 37 [TRANS_LBr] = TRANS_CUBE_LBr,
59 [_trans_LBm] = _trans_cube_RBm, 38 [TRANS_LBm] = TRANS_CUBE_RBm,
60 [_trans_FUr] = _trans_cube_FUr, 39 [TRANS_FUr] = TRANS_CUBE_FUr,
61 [_trans_FUm] = _trans_cube_FUm, 40 [TRANS_FUm] = TRANS_CUBE_FUm,
62 [_trans_FRr] = _trans_cube_RUr, 41 [TRANS_FRr] = TRANS_CUBE_RUr,
63 [_trans_FRm] = _trans_cube_LUm, 42 [TRANS_FRm] = TRANS_CUBE_LUm,
64 [_trans_FDr] = _trans_cube_BUr, 43 [TRANS_FDr] = TRANS_CUBE_BUr,
65 [_trans_FDm] = _trans_cube_BUm, 44 [TRANS_FDm] = TRANS_CUBE_BUm,
66 [_trans_FLr] = _trans_cube_LUr, 45 [TRANS_FLr] = TRANS_CUBE_LUr,
67 [_trans_FLm] = _trans_cube_RUm, 46 [TRANS_FLm] = TRANS_CUBE_RUm,
68 [_trans_BUr] = _trans_cube_FDr, 47 [TRANS_BUr] = TRANS_CUBE_FDr,
69 [_trans_BUm] = _trans_cube_FDm, 48 [TRANS_BUm] = TRANS_CUBE_FDm,
70 [_trans_BRr] = _trans_cube_LDr, 49 [TRANS_BRr] = TRANS_CUBE_LDr,
71 [_trans_BRm] = _trans_cube_RDm, 50 [TRANS_BRm] = TRANS_CUBE_RDm,
72 [_trans_BDr] = _trans_cube_BDr, 51 [TRANS_BDr] = TRANS_CUBE_BDr,
73 [_trans_BDm] = _trans_cube_BDm, 52 [TRANS_BDm] = TRANS_CUBE_BDm,
74 [_trans_BLr] = _trans_cube_RDr, 53 [TRANS_BLr] = TRANS_CUBE_RDr,
75 [_trans_BLm] = _trans_cube_LDm, 54 [TRANS_BLm] = TRANS_CUBE_LDm,
76}; 55};
77 56
78static cube_t cube_trans_table_inverse[48] = { 57static cube_t cube_trans_table_inverse[48] = {
79 [_trans_UFr] = _trans_cube_UFr_inverse, 58 [TRANS_UFr] = TRANS_CUBE_UFr_inverse,
80 [_trans_UFm] = _trans_cube_UFm_inverse, 59 [TRANS_UFm] = TRANS_CUBE_UFm_inverse,
81 [_trans_ULr] = _trans_cube_URr_inverse, 60 [TRANS_ULr] = TRANS_CUBE_URr_inverse,
82 [_trans_ULm] = _trans_cube_ULm_inverse, 61 [TRANS_ULm] = TRANS_CUBE_ULm_inverse,
83 [_trans_UBr] = _trans_cube_UBr_inverse, 62 [TRANS_UBr] = TRANS_CUBE_UBr_inverse,
84 [_trans_UBm] = _trans_cube_UBm_inverse, 63 [TRANS_UBm] = TRANS_CUBE_UBm_inverse,
85 [_trans_URr] = _trans_cube_ULr_inverse, 64 [TRANS_URr] = TRANS_CUBE_ULr_inverse,
86 [_trans_URm] = _trans_cube_URm_inverse, 65 [TRANS_URm] = TRANS_CUBE_URm_inverse,
87 [_trans_DFr] = _trans_cube_DFr_inverse, 66 [TRANS_DFr] = TRANS_CUBE_DFr_inverse,
88 [_trans_DFm] = _trans_cube_DFm_inverse, 67 [TRANS_DFm] = TRANS_CUBE_DFm_inverse,
89 [_trans_DLr] = _trans_cube_DLr_inverse, 68 [TRANS_DLr] = TRANS_CUBE_DLr_inverse,
90 [_trans_DLm] = _trans_cube_DRm_inverse, 69 [TRANS_DLm] = TRANS_CUBE_DRm_inverse,
91 [_trans_DBr] = _trans_cube_DBr_inverse, 70 [TRANS_DBr] = TRANS_CUBE_DBr_inverse,
92 [_trans_DBm] = _trans_cube_DBm_inverse, 71 [TRANS_DBm] = TRANS_CUBE_DBm_inverse,
93 [_trans_DRr] = _trans_cube_DRr_inverse, 72 [TRANS_DRr] = TRANS_CUBE_DRr_inverse,
94 [_trans_DRm] = _trans_cube_DLm_inverse, 73 [TRANS_DRm] = TRANS_CUBE_DLm_inverse,
95 [_trans_RUr] = _trans_cube_FRr_inverse, 74 [TRANS_RUr] = TRANS_CUBE_FRr_inverse,
96 [_trans_RUm] = _trans_cube_FLm_inverse, 75 [TRANS_RUm] = TRANS_CUBE_FLm_inverse,
97 [_trans_RFr] = _trans_cube_LFr_inverse, 76 [TRANS_RFr] = TRANS_CUBE_LFr_inverse,
98 [_trans_RFm] = _trans_cube_RFm_inverse, 77 [TRANS_RFm] = TRANS_CUBE_RFm_inverse,
99 [_trans_RDr] = _trans_cube_BLr_inverse, 78 [TRANS_RDr] = TRANS_CUBE_BLr_inverse,
100 [_trans_RDm] = _trans_cube_BRm_inverse, 79 [TRANS_RDm] = TRANS_CUBE_BRm_inverse,
101 [_trans_RBr] = _trans_cube_RBr_inverse, 80 [TRANS_RBr] = TRANS_CUBE_RBr_inverse,
102 [_trans_RBm] = _trans_cube_LBm_inverse, 81 [TRANS_RBm] = TRANS_CUBE_LBm_inverse,
103 [_trans_LUr] = _trans_cube_FLr_inverse, 82 [TRANS_LUr] = TRANS_CUBE_FLr_inverse,
104 [_trans_LUm] = _trans_cube_FRm_inverse, 83 [TRANS_LUm] = TRANS_CUBE_FRm_inverse,
105 [_trans_LFr] = _trans_cube_RFr_inverse, 84 [TRANS_LFr] = TRANS_CUBE_RFr_inverse,
106 [_trans_LFm] = _trans_cube_LFm_inverse, 85 [TRANS_LFm] = TRANS_CUBE_LFm_inverse,
107 [_trans_LDr] = _trans_cube_BRr_inverse, 86 [TRANS_LDr] = TRANS_CUBE_BRr_inverse,
108 [_trans_LDm] = _trans_cube_BLm_inverse, 87 [TRANS_LDm] = TRANS_CUBE_BLm_inverse,
109 [_trans_LBr] = _trans_cube_LBr_inverse, 88 [TRANS_LBr] = TRANS_CUBE_LBr_inverse,
110 [_trans_LBm] = _trans_cube_RBm_inverse, 89 [TRANS_LBm] = TRANS_CUBE_RBm_inverse,
111 [_trans_FUr] = _trans_cube_FUr_inverse, 90 [TRANS_FUr] = TRANS_CUBE_FUr_inverse,
112 [_trans_FUm] = _trans_cube_FUm_inverse, 91 [TRANS_FUm] = TRANS_CUBE_FUm_inverse,
113 [_trans_FRr] = _trans_cube_RUr_inverse, 92 [TRANS_FRr] = TRANS_CUBE_RUr_inverse,
114 [_trans_FRm] = _trans_cube_LUm_inverse, 93 [TRANS_FRm] = TRANS_CUBE_LUm_inverse,
115 [_trans_FDr] = _trans_cube_BUr_inverse, 94 [TRANS_FDr] = TRANS_CUBE_BUr_inverse,
116 [_trans_FDm] = _trans_cube_BUm_inverse, 95 [TRANS_FDm] = TRANS_CUBE_BUm_inverse,
117 [_trans_FLr] = _trans_cube_LUr_inverse, 96 [TRANS_FLr] = TRANS_CUBE_LUr_inverse,
118 [_trans_FLm] = _trans_cube_RUm_inverse, 97 [TRANS_FLm] = TRANS_CUBE_RUm_inverse,
119 [_trans_BUr] = _trans_cube_FDr_inverse, 98 [TRANS_BUr] = TRANS_CUBE_FDr_inverse,
120 [_trans_BUm] = _trans_cube_FDm_inverse, 99 [TRANS_BUm] = TRANS_CUBE_FDm_inverse,
121 [_trans_BRr] = _trans_cube_LDr_inverse, 100 [TRANS_BRr] = TRANS_CUBE_LDr_inverse,
122 [_trans_BRm] = _trans_cube_RDm_inverse, 101 [TRANS_BRm] = TRANS_CUBE_RDm_inverse,
123 [_trans_BDr] = _trans_cube_BDr_inverse, 102 [TRANS_BDr] = TRANS_CUBE_BDr_inverse,
124 [_trans_BDm] = _trans_cube_BDm_inverse, 103 [TRANS_BDm] = TRANS_CUBE_BDm_inverse,
125 [_trans_BLr] = _trans_cube_RDr_inverse, 104 [TRANS_BLr] = TRANS_CUBE_RDr_inverse,
126 [_trans_BLm] = _trans_cube_LDm_inverse, 105 [TRANS_BLm] = TRANS_CUBE_LDm_inverse,
127}; 106};
128 107
129_static cube_t 108STATIC cube_t
130transform_edges(cube_t c, uint8_t t) 109transform_edges(cube_t c, uint8_t t)
131{ 110{
132 cube_t ret, trans_cube, trans_inv; 111 cube_t ret, trans_cube, trans_inv;
@@ -144,7 +123,7 @@ transform_edges(cube_t c, uint8_t t)
144 return ret; 123 return ret;
145} 124}
146 125
147_static cube_t 126STATIC cube_t
148transform_corners(cube_t c, uint8_t t) 127transform_corners(cube_t c, uint8_t t)
149{ 128{
150 cube_t ret, trans_cube, trans_inv; 129 cube_t ret, trans_cube, trans_inv;
@@ -162,7 +141,7 @@ transform_corners(cube_t c, uint8_t t)
162 return t < 24 ? ret : invertco(ret); 141 return t < 24 ? ret : invertco(ret);
163} 142}
164 143
165_static cube_t 144STATIC cube_t
166transform(cube_t c, uint8_t t) 145transform(cube_t c, uint8_t t)
167{ 146{
168 cube_t ret, trans_cube, trans_inv; 147 cube_t ret, trans_cube, trans_inv;
@@ -180,7 +159,7 @@ transform(cube_t c, uint8_t t)
180 return t < 24 ? ret : invertco(ret); 159 return t < 24 ? ret : invertco(ret);
181} 160}
182 161
183_static cube_t 162STATIC cube_t
184applytrans(cube_t cube, const char *buf) 163applytrans(cube_t cube, const char *buf)
185{ 164{
186 uint8_t t; 165 uint8_t t;
diff --git a/src/core/transform_with_switch.h b/src/core/transform_with_switch.h
index 429e656..3ffd9af 100644
--- a/src/core/transform_with_switch.h
+++ b/src/core/transform_with_switch.h
@@ -1,346 +1,346 @@
1#define _trans_edges_rotation(T, c) \ 1#define TRANS_EDGES_ROTATION(T, c) \
2 compose_edges(compose_edges(_trans_cube_ ## T, c), \ 2 compose_edges(compose_edges(TRANS_CUBE_ ## T, c), \
3 _trans_cube_ ## T ## _inverse) 3 TRANS_CUBE_ ## T ## _INVERSE)
4#define _trans_edges_mirrored(T, c) _trans_edges_rotation(T, c) 4#define TRANS_EDGES_MIRRORED(T, c) TRANS_EDGES_ROTATION(T, c)
5 5
6#define _trans_corners_rotation(T, c) \ 6#define TRANS_CORNERS_ROTATION(T, c) \
7 compose_corners(compose_corners(_trans_cube_ ## T, c), \ 7 compose_corners(compose_corners(TRANS_CUBE_ ## T, c), \
8 _trans_cube_ ## T ## _inverse) 8 TRANS_CUBE_ ## T ## _INVERSE)
9#define _trans_corners_mirrored(T, c) \ 9#define TRANS_CORNERS_MIRRORED(T, c) \
10 invertco(compose_corners( \ 10 invertco(compose_corners( \
11 compose_corners(_trans_cube_ ## T, c), _trans_cube_ ## T ## _inverse)) 11 compose_corners(TRANS_CUBE_ ## T, c), TRANS_CUBE_ ## T ## _INVERSE))
12 12
13#define _trans_rotation(T, c) \ 13#define TRANS_ROTATION(T, c) \
14 compose(compose(_trans_cube_ ## T, c), \ 14 compose(compose(TRANS_CUBE_ ## T, c), \
15 _trans_cube_ ## T ## _inverse) 15 TRANS_CUBE_ ## T ## _INVERSE)
16#define _trans_mirrored(T, c) \ 16#define TRANS_MIRRORED(T, c) \
17 invertco(compose(compose(_trans_cube_ ## T, c), \ 17 invertco(compose(compose(TRANS_CUBE_ ## T, c), \
18 _trans_cube_ ## T ## _inverse)) 18 TRANS_CUBE_ ## T ## _INVERSE))
19 19
20_static cube_t transform_edges(cube_t, uint8_t); 20STATIC cube_t transform_edges(cube_t, uint8_t);
21_static cube_t transform_corners(cube_t, uint8_t); 21STATIC cube_t transform_corners(cube_t, uint8_t);
22_static cube_t transform(cube_t, uint8_t); 22STATIC cube_t transform(cube_t, uint8_t);
23_static cube_t applytrans(cube_t, const char *); 23STATIC cube_t applytrans(cube_t, const char *);
24 24
25_static cube_t 25STATIC cube_t
26transform_edges(cube_t c, uint8_t t) 26transform_edges(cube_t c, uint8_t t)
27{ 27{
28 switch (t) { 28 switch (t) {
29 case _trans_UFr: 29 case TRANS_UFr:
30 return c; 30 return c;
31 case _trans_ULr: 31 case TRANS_ULr:
32 return _trans_edges_rotation(ULr, c); 32 return TRANS_EDGES_ROTATION(ULr, c);
33 case _trans_UBr: 33 case TRANS_UBr:
34 return _trans_edges_rotation(UBr, c); 34 return TRANS_EDGES_ROTATION(UBr, c);
35 case _trans_URr: 35 case TRANS_URr:
36 return _trans_edges_rotation(URr, c); 36 return TRANS_EDGES_ROTATION(URr, c);
37 case _trans_DFr: 37 case TRANS_DFr:
38 return _trans_edges_rotation(DFr, c); 38 return TRANS_EDGES_ROTATION(DFr, c);
39 case _trans_DLr: 39 case TRANS_DLr:
40 return _trans_edges_rotation(DLr, c); 40 return TRANS_EDGES_ROTATION(DLr, c);
41 case _trans_DBr: 41 case TRANS_DBr:
42 return _trans_edges_rotation(DBr, c); 42 return TRANS_EDGES_ROTATION(DBr, c);
43 case _trans_DRr: 43 case TRANS_DRr:
44 return _trans_edges_rotation(DRr, c); 44 return TRANS_EDGES_ROTATION(DRr, c);
45 case _trans_RUr: 45 case TRANS_RUr:
46 return _trans_edges_rotation(RUr, c); 46 return TRANS_EDGES_ROTATION(RUr, c);
47 case _trans_RFr: 47 case TRANS_RFr:
48 return _trans_edges_rotation(RFr, c); 48 return TRANS_EDGES_ROTATION(RFr, c);
49 case _trans_RDr: 49 case TRANS_RDr:
50 return _trans_edges_rotation(RDr, c); 50 return TRANS_EDGES_ROTATION(RDr, c);
51 case _trans_RBr: 51 case TRANS_RBr:
52 return _trans_edges_rotation(RBr, c); 52 return TRANS_EDGES_ROTATION(RBr, c);
53 case _trans_LUr: 53 case TRANS_LUr:
54 return _trans_edges_rotation(LUr, c); 54 return TRANS_EDGES_ROTATION(LUr, c);
55 case _trans_LFr: 55 case TRANS_LFr:
56 return _trans_edges_rotation(LFr, c); 56 return TRANS_EDGES_ROTATION(LFr, c);
57 case _trans_LDr: 57 case TRANS_LDr:
58 return _trans_edges_rotation(LDr, c); 58 return TRANS_EDGES_ROTATION(LDr, c);
59 case _trans_LBr: 59 case TRANS_LBr:
60 return _trans_edges_rotation(LBr, c); 60 return TRANS_EDGES_ROTATION(LBr, c);
61 case _trans_FUr: 61 case TRANS_FUr:
62 return _trans_edges_rotation(FUr, c); 62 return TRANS_EDGES_ROTATION(FUr, c);
63 case _trans_FRr: 63 case TRANS_FRr:
64 return _trans_edges_rotation(FRr, c); 64 return TRANS_EDGES_ROTATION(FRr, c);
65 case _trans_FDr: 65 case TRANS_FDr:
66 return _trans_edges_rotation(FDr, c); 66 return TRANS_EDGES_ROTATION(FDr, c);
67 case _trans_FLr: 67 case TRANS_FLr:
68 return _trans_edges_rotation(FLr, c); 68 return TRANS_EDGES_ROTATION(FLr, c);
69 case _trans_BUr: 69 case TRANS_BUr:
70 return _trans_edges_rotation(BUr, c); 70 return TRANS_EDGES_ROTATION(BUr, c);
71 case _trans_BRr: 71 case TRANS_BRr:
72 return _trans_edges_rotation(BRr, c); 72 return TRANS_EDGES_ROTATION(BRr, c);
73 case _trans_BDr: 73 case TRANS_BDr:
74 return _trans_edges_rotation(BDr, c); 74 return TRANS_EDGES_ROTATION(BDr, c);
75 case _trans_BLr: 75 case TRANS_BLr:
76 return _trans_edges_rotation(BLr, c); 76 return TRANS_EDGES_ROTATION(BLr, c);
77 case _trans_UFm: 77 case TRANS_UFm:
78 return _trans_edges_mirrored(UFm, c); 78 return TRANS_EDGES_MIRRORED(UFm, c);
79 case _trans_ULm: 79 case TRANS_ULm:
80 return _trans_edges_mirrored(ULm, c); 80 return TRANS_EDGES_MIRRORED(ULm, c);
81 case _trans_UBm: 81 case TRANS_UBm:
82 return _trans_edges_mirrored(UBm, c); 82 return TRANS_EDGES_MIRRORED(UBm, c);
83 case _trans_URm: 83 case TRANS_URm:
84 return _trans_edges_mirrored(URm, c); 84 return TRANS_EDGES_MIRRORED(URm, c);
85 case _trans_DFm: 85 case TRANS_DFm:
86 return _trans_edges_mirrored(DFm, c); 86 return TRANS_EDGES_MIRRORED(DFm, c);
87 case _trans_DLm: 87 case TRANS_DLm:
88 return _trans_edges_mirrored(DLm, c); 88 return TRANS_EDGES_MIRRORED(DLm, c);
89 case _trans_DBm: 89 case TRANS_DBm:
90 return _trans_edges_mirrored(DBm, c); 90 return TRANS_EDGES_MIRRORED(DBm, c);
91 case _trans_DRm: 91 case TRANS_DRm:
92 return _trans_edges_mirrored(DRm, c); 92 return TRANS_EDGES_MIRRORED(DRm, c);
93 case _trans_RUm: 93 case TRANS_RUm:
94 return _trans_edges_mirrored(RUm, c); 94 return TRANS_EDGES_MIRRORED(RUm, c);
95 case _trans_RFm: 95 case TRANS_RFm:
96 return _trans_edges_mirrored(RFm, c); 96 return TRANS_EDGES_MIRRORED(RFm, c);
97 case _trans_RDm: 97 case TRANS_RDm:
98 return _trans_edges_mirrored(RDm, c); 98 return TRANS_EDGES_MIRRORED(RDm, c);
99 case _trans_RBm: 99 case TRANS_RBm:
100 return _trans_edges_mirrored(RBm, c); 100 return TRANS_EDGES_MIRRORED(RBm, c);
101 case _trans_LUm: 101 case TRANS_LUm:
102 return _trans_edges_mirrored(LUm, c); 102 return TRANS_EDGES_MIRRORED(LUm, c);
103 case _trans_LFm: 103 case TRANS_LFm:
104 return _trans_edges_mirrored(LFm, c); 104 return TRANS_EDGES_MIRRORED(LFm, c);
105 case _trans_LDm: 105 case TRANS_LDm:
106 return _trans_edges_mirrored(LDm, c); 106 return TRANS_EDGES_MIRRORED(LDm, c);
107 case _trans_LBm: 107 case TRANS_LBm:
108 return _trans_edges_mirrored(LBm, c); 108 return TRANS_EDGES_MIRRORED(LBm, c);
109 case _trans_FUm: 109 case TRANS_FUm:
110 return _trans_edges_mirrored(FUm, c); 110 return TRANS_EDGES_MIRRORED(FUm, c);
111 case _trans_FRm: 111 case TRANS_FRm:
112 return _trans_edges_mirrored(FRm, c); 112 return TRANS_EDGES_MIRRORED(FRm, c);
113 case _trans_FDm: 113 case TRANS_FDm:
114 return _trans_edges_mirrored(FDm, c); 114 return TRANS_EDGES_MIRRORED(FDm, c);
115 case _trans_FLm: 115 case TRANS_FLm:
116 return _trans_edges_mirrored(FLm, c); 116 return TRANS_EDGES_MIRRORED(FLm, c);
117 case _trans_BUm: 117 case TRANS_BUm:
118 return _trans_edges_mirrored(BUm, c); 118 return TRANS_EDGES_MIRRORED(BUm, c);
119 case _trans_BRm: 119 case TRANS_BRm:
120 return _trans_edges_mirrored(BRm, c); 120 return TRANS_EDGES_MIRRORED(BRm, c);
121 case _trans_BDm: 121 case TRANS_BDm:
122 return _trans_edges_mirrored(BDm, c); 122 return TRANS_EDGES_MIRRORED(BDm, c);
123 case _trans_BLm: 123 case TRANS_BLm:
124 return _trans_edges_mirrored(BLm, c); 124 return TRANS_EDGES_MIRRORED(BLm, c);
125 default: 125 default:
126 LOG("transform error, unknown transformation %" PRIu8 "\n", t); 126 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
127 return zero; 127 return zero;
128 } 128 }
129} 129}
130 130
131_static cube_t 131STATIC cube_t
132transform_corners(cube_t c, uint8_t t) 132transform_corners(cube_t c, uint8_t t)
133{ 133{
134 switch (t) { 134 switch (t) {
135 case _trans_UFr: 135 case TRANS_UFr:
136 return c; 136 return c;
137 case _trans_ULr: 137 case TRANS_ULr:
138 return _trans_corners_rotation(ULr, c); 138 return TRANS_CORNERS_ROTATION(ULr, c);
139 case _trans_UBr: 139 case TRANS_UBr:
140 return _trans_corners_rotation(UBr, c); 140 return TRANS_CORNERS_ROTATION(UBr, c);
141 case _trans_URr: 141 case TRANS_URr:
142 return _trans_corners_rotation(URr, c); 142 return TRANS_CORNERS_ROTATION(URr, c);
143 case _trans_DFr: 143 case TRANS_DFr:
144 return _trans_corners_rotation(DFr, c); 144 return TRANS_CORNERS_ROTATION(DFr, c);
145 case _trans_DLr: 145 case TRANS_DLr:
146 return _trans_corners_rotation(DLr, c); 146 return TRANS_CORNERS_ROTATION(DLr, c);
147 case _trans_DBr: 147 case TRANS_DBr:
148 return _trans_corners_rotation(DBr, c); 148 return TRANS_CORNERS_ROTATION(DBr, c);
149 case _trans_DRr: 149 case TRANS_DRr:
150 return _trans_corners_rotation(DRr, c); 150 return TRANS_CORNERS_ROTATION(DRr, c);
151 case _trans_RUr: 151 case TRANS_RUr:
152 return _trans_corners_rotation(RUr, c); 152 return TRANS_CORNERS_ROTATION(RUr, c);
153 case _trans_RFr: 153 case TRANS_RFr:
154 return _trans_corners_rotation(RFr, c); 154 return TRANS_CORNERS_ROTATION(RFr, c);
155 case _trans_RDr: 155 case TRANS_RDr:
156 return _trans_corners_rotation(RDr, c); 156 return TRANS_CORNERS_ROTATION(RDr, c);
157 case _trans_RBr: 157 case TRANS_RBr:
158 return _trans_corners_rotation(RBr, c); 158 return TRANS_CORNERS_ROTATION(RBr, c);
159 case _trans_LUr: 159 case TRANS_LUr:
160 return _trans_corners_rotation(LUr, c); 160 return TRANS_CORNERS_ROTATION(LUr, c);
161 case _trans_LFr: 161 case TRANS_LFr:
162 return _trans_corners_rotation(LFr, c); 162 return TRANS_CORNERS_ROTATION(LFr, c);
163 case _trans_LDr: 163 case TRANS_LDr:
164 return _trans_corners_rotation(LDr, c); 164 return TRANS_CORNERS_ROTATION(LDr, c);
165 case _trans_LBr: 165 case TRANS_LBr:
166 return _trans_corners_rotation(LBr, c); 166 return TRANS_CORNERS_ROTATION(LBr, c);
167 case _trans_FUr: 167 case TRANS_FUr:
168 return _trans_corners_rotation(FUr, c); 168 return TRANS_CORNERS_ROTATION(FUr, c);
169 case _trans_FRr: 169 case TRANS_FRr:
170 return _trans_corners_rotation(FRr, c); 170 return TRANS_CORNERS_ROTATION(FRr, c);
171 case _trans_FDr: 171 case TRANS_FDr:
172 return _trans_corners_rotation(FDr, c); 172 return TRANS_CORNERS_ROTATION(FDr, c);
173 case _trans_FLr: 173 case TRANS_FLr:
174 return _trans_corners_rotation(FLr, c); 174 return TRANS_CORNERS_ROTATION(FLr, c);
175 case _trans_BUr: 175 case TRANS_BUr:
176 return _trans_corners_rotation(BUr, c); 176 return TRANS_CORNERS_ROTATION(BUr, c);
177 case _trans_BRr: 177 case TRANS_BRr:
178 return _trans_corners_rotation(BRr, c); 178 return TRANS_CORNERS_ROTATION(BRr, c);
179 case _trans_BDr: 179 case TRANS_BDr:
180 return _trans_corners_rotation(BDr, c); 180 return TRANS_CORNERS_ROTATION(BDr, c);
181 case _trans_BLr: 181 case TRANS_BLr:
182 return _trans_corners_rotation(BLr, c); 182 return TRANS_CORNERS_ROTATION(BLr, c);
183 case _trans_UFm: 183 case TRANS_UFm:
184 return _trans_corners_mirrored(UFm, c); 184 return TRANS_CORNERS_MIRRORED(UFm, c);
185 case _trans_ULm: 185 case TRANS_ULm:
186 return _trans_corners_mirrored(ULm, c); 186 return TRANS_CORNERS_MIRRORED(ULm, c);
187 case _trans_UBm: 187 case TRANS_UBm:
188 return _trans_corners_mirrored(UBm, c); 188 return TRANS_CORNERS_MIRRORED(UBm, c);
189 case _trans_URm: 189 case TRANS_URm:
190 return _trans_corners_mirrored(URm, c); 190 return TRANS_CORNERS_MIRRORED(URm, c);
191 case _trans_DFm: 191 case TRANS_DFm:
192 return _trans_corners_mirrored(DFm, c); 192 return TRANS_CORNERS_MIRRORED(DFm, c);
193 case _trans_DLm: 193 case TRANS_DLm:
194 return _trans_corners_mirrored(DLm, c); 194 return TRANS_CORNERS_MIRRORED(DLm, c);
195 case _trans_DBm: 195 case TRANS_DBm:
196 return _trans_corners_mirrored(DBm, c); 196 return TRANS_CORNERS_MIRRORED(DBm, c);
197 case _trans_DRm: 197 case TRANS_DRm:
198 return _trans_corners_mirrored(DRm, c); 198 return TRANS_CORNERS_MIRRORED(DRm, c);
199 case _trans_RUm: 199 case TRANS_RUm:
200 return _trans_corners_mirrored(RUm, c); 200 return TRANS_CORNERS_MIRRORED(RUm, c);
201 case _trans_RFm: 201 case TRANS_RFm:
202 return _trans_corners_mirrored(RFm, c); 202 return TRANS_CORNERS_MIRRORED(RFm, c);
203 case _trans_RDm: 203 case TRANS_RDm:
204 return _trans_corners_mirrored(RDm, c); 204 return TRANS_CORNERS_MIRRORED(RDm, c);
205 case _trans_RBm: 205 case TRANS_RBm:
206 return _trans_corners_mirrored(RBm, c); 206 return TRANS_CORNERS_MIRRORED(RBm, c);
207 case _trans_LUm: 207 case TRANS_LUm:
208 return _trans_corners_mirrored(LUm, c); 208 return TRANS_CORNERS_MIRRORED(LUm, c);
209 case _trans_LFm: 209 case TRANS_LFm:
210 return _trans_corners_mirrored(LFm, c); 210 return TRANS_CORNERS_MIRRORED(LFm, c);
211 case _trans_LDm: 211 case TRANS_LDm:
212 return _trans_corners_mirrored(LDm, c); 212 return TRANS_CORNERS_MIRRORED(LDm, c);
213 case _trans_LBm: 213 case TRANS_LBm:
214 return _trans_corners_mirrored(LBm, c); 214 return TRANS_CORNERS_MIRRORED(LBm, c);
215 case _trans_FUm: 215 case TRANS_FUm:
216 return _trans_corners_mirrored(FUm, c); 216 return TRANS_CORNERS_MIRRORED(FUm, c);
217 case _trans_FRm: 217 case TRANS_FRm:
218 return _trans_corners_mirrored(FRm, c); 218 return TRANS_CORNERS_MIRRORED(FRm, c);
219 case _trans_FDm: 219 case TRANS_FDm:
220 return _trans_corners_mirrored(FDm, c); 220 return TRANS_CORNERS_MIRRORED(FDm, c);
221 case _trans_FLm: 221 case TRANS_FLm:
222 return _trans_corners_mirrored(FLm, c); 222 return TRANS_CORNERS_MIRRORED(FLm, c);
223 case _trans_BUm: 223 case TRANS_BUm:
224 return _trans_corners_mirrored(BUm, c); 224 return TRANS_CORNERS_MIRRORED(BUm, c);
225 case _trans_BRm: 225 case TRANS_BRm:
226 return _trans_corners_mirrored(BRm, c); 226 return TRANS_CORNERS_MIRRORED(BRm, c);
227 case _trans_BDm: 227 case TRANS_BDm:
228 return _trans_corners_mirrored(BDm, c); 228 return TRANS_CORNERS_MIRRORED(BDm, c);
229 case _trans_BLm: 229 case TRANS_BLm:
230 return _trans_corners_mirrored(BLm, c); 230 return TRANS_CORNERS_MIRRORED(BLm, c);
231 default: 231 default:
232 LOG("transform error, unknown transformation %" PRIu8 "\n", t); 232 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
233 return zero; 233 return zero;
234 } 234 }
235} 235}
236 236
237_static cube_t 237STATIC cube_t
238transform(cube_t c, uint8_t t) 238transform(cube_t c, uint8_t t)
239{ 239{
240 switch (t) { 240 switch (t) {
241 case _trans_UFr: 241 case TRANS_UFr:
242 return c; 242 return c;
243 case _trans_ULr: 243 case TRANS_ULr:
244 return _trans_rotation(ULr, c); 244 return TRANS_ROTATION(ULr, c);
245 case _trans_UBr: 245 case TRANS_UBr:
246 return _trans_rotation(UBr, c); 246 return TRANS_ROTATION(UBr, c);
247 case _trans_URr: 247 case TRANS_URr:
248 return _trans_rotation(URr, c); 248 return TRANS_ROTATION(URr, c);
249 case _trans_DFr: 249 case TRANS_DFr:
250 return _trans_rotation(DFr, c); 250 return TRANS_ROTATION(DFr, c);
251 case _trans_DLr: 251 case TRANS_DLr:
252 return _trans_rotation(DLr, c); 252 return TRANS_ROTATION(DLr, c);
253 case _trans_DBr: 253 case TRANS_DBr:
254 return _trans_rotation(DBr, c); 254 return TRANS_ROTATION(DBr, c);
255 case _trans_DRr: 255 case TRANS_DRr:
256 return _trans_rotation(DRr, c); 256 return TRANS_ROTATION(DRr, c);
257 case _trans_RUr: 257 case TRANS_RUr:
258 return _trans_rotation(RUr, c); 258 return TRANS_ROTATION(RUr, c);
259 case _trans_RFr: 259 case TRANS_RFr:
260 return _trans_rotation(RFr, c); 260 return TRANS_ROTATION(RFr, c);
261 case _trans_RDr: 261 case TRANS_RDr:
262 return _trans_rotation(RDr, c); 262 return TRANS_ROTATION(RDr, c);
263 case _trans_RBr: 263 case TRANS_RBr:
264 return _trans_rotation(RBr, c); 264 return TRANS_ROTATION(RBr, c);
265 case _trans_LUr: 265 case TRANS_LUr:
266 return _trans_rotation(LUr, c); 266 return TRANS_ROTATION(LUr, c);
267 case _trans_LFr: 267 case TRANS_LFr:
268 return _trans_rotation(LFr, c); 268 return TRANS_ROTATION(LFr, c);
269 case _trans_LDr: 269 case TRANS_LDr:
270 return _trans_rotation(LDr, c); 270 return TRANS_ROTATION(LDr, c);
271 case _trans_LBr: 271 case TRANS_LBr:
272 return _trans_rotation(LBr, c); 272 return TRANS_ROTATION(LBr, c);
273 case _trans_FUr: 273 case TRANS_FUr:
274 return _trans_rotation(FUr, c); 274 return TRANS_ROTATION(FUr, c);
275 case _trans_FRr: 275 case TRANS_FRr:
276 return _trans_rotation(FRr, c); 276 return TRANS_ROTATION(FRr, c);
277 case _trans_FDr: 277 case TRANS_FDr:
278 return _trans_rotation(FDr, c); 278 return TRANS_ROTATION(FDr, c);
279 case _trans_FLr: 279 case TRANS_FLr:
280 return _trans_rotation(FLr, c); 280 return TRANS_ROTATION(FLr, c);
281 case _trans_BUr: 281 case TRANS_BUr:
282 return _trans_rotation(BUr, c); 282 return TRANS_ROTATION(BUr, c);
283 case _trans_BRr: 283 case TRANS_BRr:
284 return _trans_rotation(BRr, c); 284 return TRANS_ROTATION(BRr, c);
285 case _trans_BDr: 285 case TRANS_BDr:
286 return _trans_rotation(BDr, c); 286 return TRANS_ROTATION(BDr, c);
287 case _trans_BLr: 287 case TRANS_BLr:
288 return _trans_rotation(BLr, c); 288 return TRANS_ROTATION(BLr, c);
289 case _trans_UFm: 289 case TRANS_UFm:
290 return _trans_mirrored(UFm, c); 290 return TRANS_MIRRORED(UFm, c);
291 case _trans_ULm: 291 case TRANS_ULm:
292 return _trans_mirrored(ULm, c); 292 return TRANS_MIRRORED(ULm, c);
293 case _trans_UBm: 293 case TRANS_UBm:
294 return _trans_mirrored(UBm, c); 294 return TRANS_MIRRORED(UBm, c);
295 case _trans_URm: 295 case TRANS_URm:
296 return _trans_mirrored(URm, c); 296 return TRANS_MIRRORED(URm, c);
297 case _trans_DFm: 297 case TRANS_DFm:
298 return _trans_mirrored(DFm, c); 298 return TRANS_MIRRORED(DFm, c);
299 case _trans_DLm: 299 case TRANS_DLm:
300 return _trans_mirrored(DLm, c); 300 return TRANS_MIRRORED(DLm, c);
301 case _trans_DBm: 301 case TRANS_DBm:
302 return _trans_mirrored(DBm, c); 302 return TRANS_MIRRORED(DBm, c);
303 case _trans_DRm: 303 case TRANS_DRm:
304 return _trans_mirrored(DRm, c); 304 return TRANS_MIRRORED(DRm, c);
305 case _trans_RUm: 305 case TRANS_RUm:
306 return _trans_mirrored(RUm, c); 306 return TRANS_MIRRORED(RUm, c);
307 case _trans_RFm: 307 case TRANS_RFm:
308 return _trans_mirrored(RFm, c); 308 return TRANS_MIRRORED(RFm, c);
309 case _trans_RDm: 309 case TRANS_RDm:
310 return _trans_mirrored(RDm, c); 310 return TRANS_MIRRORED(RDm, c);
311 case _trans_RBm: 311 case TRANS_RBm:
312 return _trans_mirrored(RBm, c); 312 return TRANS_MIRRORED(RBm, c);
313 case _trans_LUm: 313 case TRANS_LUm:
314 return _trans_mirrored(LUm, c); 314 return TRANS_MIRRORED(LUm, c);
315 case _trans_LFm: 315 case TRANS_LFm:
316 return _trans_mirrored(LFm, c); 316 return TRANS_MIRRORED(LFm, c);
317 case _trans_LDm: 317 case TRANS_LDm:
318 return _trans_mirrored(LDm, c); 318 return TRANS_MIRRORED(LDm, c);
319 case _trans_LBm: 319 case TRANS_LBm:
320 return _trans_mirrored(LBm, c); 320 return TRANS_MIRRORED(LBm, c);
321 case _trans_FUm: 321 case TRANS_FUm:
322 return _trans_mirrored(FUm, c); 322 return TRANS_MIRRORED(FUm, c);
323 case _trans_FRm: 323 case TRANS_FRm:
324 return _trans_mirrored(FRm, c); 324 return TRANS_MIRRORED(FRm, c);
325 case _trans_FDm: 325 case TRANS_FDm:
326 return _trans_mirrored(FDm, c); 326 return TRANS_MIRRORED(FDm, c);
327 case _trans_FLm: 327 case TRANS_FLm:
328 return _trans_mirrored(FLm, c); 328 return TRANS_MIRRORED(FLm, c);
329 case _trans_BUm: 329 case TRANS_BUm:
330 return _trans_mirrored(BUm, c); 330 return TRANS_MIRRORED(BUm, c);
331 case _trans_BRm: 331 case TRANS_BRm:
332 return _trans_mirrored(BRm, c); 332 return TRANS_MIRRORED(BRm, c);
333 case _trans_BDm: 333 case TRANS_BDm:
334 return _trans_mirrored(BDm, c); 334 return TRANS_MIRRORED(BDm, c);
335 case _trans_BLm: 335 case TRANS_BLm:
336 return _trans_mirrored(BLm, c); 336 return TRANS_MIRRORED(BLm, c);
337 default: 337 default:
338 LOG("transform error, unknown transformation %" PRIu8 "\n", t); 338 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
339 return zero; 339 return zero;
340 } 340 }
341} 341}
342 342
343_static cube_t 343STATIC cube_t
344applytrans(cube_t cube, const char *buf) 344applytrans(cube_t cube, const char *buf)
345{ 345{
346 uint8_t t; 346 uint8_t t;
diff --git a/src/nissy.c b/src/nissy.c
index f8c1f4d..ac9a92c 100644
--- a/src/nissy.c
+++ b/src/nissy.c
@@ -10,8 +10,8 @@
10 10
11#include "nissy.h" 11#include "nissy.h"
12 12
13_static int parse_h48_options(const char *, uint8_t *, uint8_t *, uint8_t *); 13STATIC int parse_h48_options(const char *, uint8_t *, uint8_t *, uint8_t *);
14_static int64_t write_result(cube_t, char [static 22]); 14STATIC int64_t write_result(cube_t, char [static 22]);
15 15
16/* TODO: add option to get DR, maybe C-only, E-only, eo... */ 16/* TODO: add option to get DR, maybe C-only, E-only, eo... */
17#define GETCUBE_OPTIONS(S, F) { .option = S, .fix = F } 17#define GETCUBE_OPTIONS(S, F) { .option = S, .fix = F }
@@ -23,7 +23,7 @@ struct {
23 GETCUBE_OPTIONS(NULL, NULL) 23 GETCUBE_OPTIONS(NULL, NULL)
24}; 24};
25 25
26_static int 26STATIC int
27parse_h48_options(const char *buf, uint8_t *h, uint8_t *k, uint8_t *maxdepth) 27parse_h48_options(const char *buf, uint8_t *h, uint8_t *k, uint8_t *maxdepth)
28{ 28{
29 bool h_valid, k_valid, maxdepth_valid; 29 bool h_valid, k_valid, maxdepth_valid;
@@ -61,7 +61,7 @@ parse_h48_options_error:
61 return -1; 61 return -1;
62} 62}
63 63
64_static int64_t 64STATIC int64_t
65write_result(cube_t cube, char result[static 22]) 65write_result(cube_t cube, char result[static 22])
66{ 66{
67 if (!isconsistent(cube)) { 67 if (!isconsistent(cube)) {
diff --git a/src/solvers/generic/generic.h b/src/solvers/generic/generic.h
index 41d995a..1e0299b 100644
--- a/src/solvers/generic/generic.h
+++ b/src/solvers/generic/generic.h
@@ -9,14 +9,14 @@ typedef struct {
9 uint8_t (*estimate)(cube_t); 9 uint8_t (*estimate)(cube_t);
10} dfsarg_generic_t; 10} dfsarg_generic_t;
11 11
12_static void solve_generic_appendsolution(dfsarg_generic_t *); 12STATIC void solve_generic_appendsolution(dfsarg_generic_t *);
13_static int solve_generic_dfs(dfsarg_generic_t *); 13STATIC int solve_generic_dfs(dfsarg_generic_t *);
14_static int64_t solve_generic(cube_t, const char *, int8_t, int8_t, int64_t, 14STATIC int64_t solve_generic(cube_t, const char *, int8_t, int8_t, int64_t,
15 int8_t, char *, uint8_t (*)(cube_t)); 15 int8_t, char *, uint8_t (*)(cube_t));
16_static uint8_t estimate_simple(cube_t); 16STATIC uint8_t estimate_simple(cube_t);
17_static int64_t solve_simple(cube_t, int8_t, int8_t, int64_t, int8_t, char *); 17STATIC int64_t solve_simple(cube_t, int8_t, int8_t, int64_t, int8_t, char *);
18 18
19_static void 19STATIC void
20solve_generic_appendsolution(dfsarg_generic_t *arg) 20solve_generic_appendsolution(dfsarg_generic_t *arg)
21{ 21{
22 int strl; 22 int strl;
@@ -29,7 +29,7 @@ solve_generic_appendsolution(dfsarg_generic_t *arg)
29 (*arg->nsols)++; 29 (*arg->nsols)++;
30} 30}
31 31
32_static int 32STATIC int
33solve_generic_dfs(dfsarg_generic_t *arg) 33solve_generic_dfs(dfsarg_generic_t *arg)
34{ 34{
35 dfsarg_generic_t nextarg; 35 dfsarg_generic_t nextarg;
@@ -64,7 +64,7 @@ solve_generic_dfs(dfsarg_generic_t *arg)
64 return ret; 64 return ret;
65} 65}
66 66
67_static int64_t 67STATIC int64_t
68solve_generic( 68solve_generic(
69 cube_t cube, 69 cube_t cube,
70 const char *nisstype, 70 const char *nisstype,
@@ -128,13 +128,13 @@ solve_generic(
128 return ret; 128 return ret;
129} 129}
130 130
131_static uint8_t 131STATIC uint8_t
132estimate_simple(cube_t cube) 132estimate_simple(cube_t cube)
133{ 133{
134 return issolved(cube) ? 0 : 1; 134 return issolved(cube) ? 0 : 1;
135} 135}
136 136
137_static int64_t 137STATIC int64_t
138solve_simple( 138solve_simple(
139 cube_t cube, 139 cube_t cube,
140 int8_t minmoves, 140 int8_t minmoves,
diff --git a/src/solvers/h48/coordinate.h b/src/solvers/h48/coordinate.h
index 47b805d..4da5575 100644
--- a/src/solvers/h48/coordinate.h
+++ b/src/solvers/h48/coordinate.h
@@ -1,15 +1,15 @@
1#define H48_ESIZE(h) ((_12c4 * _8c4) << (int64_t)(h)) 1#define H48_ESIZE(h) ((COMB_12_4 * COMB_8_4) << (int64_t)(h))
2 2
3#define COCLASS_MASK (UINT32_C(0xFFFF) << UINT32_C(16)) 3#define COCLASS_MASK (UINT32_C(0xFFFF) << UINT32_C(16))
4#define COCLASS(x) (((x) & COCLASS_MASK) >> UINT32_C(16)) 4#define COCLASS(x) (((x) & COCLASS_MASK) >> UINT32_C(16))
5#define TTREP_MASK (UINT32_C(0xFF) << UINT32_C(8)) 5#define TTREP_MASK (UINT32_C(0xFF) << UINT32_C(8))
6#define TTREP(x) (((x) & TTREP_MASK) >> UINT32_C(8)) 6#define TTREP(x) (((x) & TTREP_MASK) >> UINT32_C(8))
7 7
8_static_inline int64_t coord_h48(cube_t, const uint32_t *, uint8_t); 8STATIC_INLINE int64_t coord_h48(cube_t, const uint32_t *, uint8_t);
9_static_inline int64_t coord_h48_edges(cube_t, int64_t, uint8_t, uint8_t); 9STATIC_INLINE int64_t coord_h48_edges(cube_t, int64_t, uint8_t, uint8_t);
10_static_inline cube_t invcoord_h48(int64_t, const cube_t *, uint8_t); 10STATIC_INLINE cube_t invcoord_h48(int64_t, const cube_t *, uint8_t);
11 11
12_static_inline int64_t 12STATIC_INLINE int64_t
13coord_h48(cube_t c, const uint32_t *cocsepdata, uint8_t h) 13coord_h48(cube_t c, const uint32_t *cocsepdata, uint8_t h)
14{ 14{
15 int64_t cocsep, coclass; 15 int64_t cocsep, coclass;
@@ -26,7 +26,7 @@ coord_h48(cube_t c, const uint32_t *cocsepdata, uint8_t h)
26 return coord_h48_edges(c, coclass, ttrep, h); 26 return coord_h48_edges(c, coclass, ttrep, h);
27} 27}
28 28
29_static_inline int64_t 29STATIC_INLINE int64_t
30coord_h48_edges(cube_t c, int64_t coclass, uint8_t ttrep, uint8_t h) 30coord_h48_edges(cube_t c, int64_t coclass, uint8_t ttrep, uint8_t h)
31{ 31{
32 cube_t d; 32 cube_t d;
@@ -45,7 +45,7 @@ This function does not necessarily return a cube whose coordinate is
45the given value, because it works up to symmetry. This means that the 45the given value, because it works up to symmetry. This means that the
46returned cube is a transformed cube of one that gives the correct value. 46returned cube is a transformed cube of one that gives the correct value.
47*/ 47*/
48_static_inline cube_t 48STATIC_INLINE cube_t
49invcoord_h48(int64_t i, const cube_t *crep, uint8_t h) 49invcoord_h48(int64_t i, const cube_t *crep, uint8_t h)
50{ 50{
51 cube_t ret; 51 cube_t ret;
diff --git a/src/solvers/h48/gendata_cocsep.h b/src/solvers/h48/gendata_cocsep.h
index b7d28e1..54e092e 100644
--- a/src/solvers/h48/gendata_cocsep.h
+++ b/src/solvers/h48/gendata_cocsep.h
@@ -1,5 +1,5 @@
1#define COCSEP_CLASSES ((size_t)3393) 1#define COCSEP_CLASSES ((size_t)3393)
2#define COCSEP_TABLESIZE ((size_t)_3p7 << (size_t)7) 2#define COCSEP_TABLESIZE ((size_t)POW_3_7 << (size_t)7)
3#define COCSEP_VISITEDSIZE ((COCSEP_TABLESIZE + (size_t)7) / (size_t)8) 3#define COCSEP_VISITEDSIZE ((COCSEP_TABLESIZE + (size_t)7) / (size_t)8)
4#define COCSEP_FULLSIZE ((size_t)4 * (COCSEP_TABLESIZE + (size_t)12)) 4#define COCSEP_FULLSIZE ((size_t)4 * (COCSEP_TABLESIZE + (size_t)12))
5 5
@@ -20,13 +20,13 @@ typedef struct {
20 cube_t *rep; 20 cube_t *rep;
21} cocsep_dfs_arg_t; 21} cocsep_dfs_arg_t;
22 22
23_static_inline bool get_visited(const uint8_t *, int64_t); 23STATIC_INLINE bool get_visited(const uint8_t *, int64_t);
24_static_inline void set_visited(uint8_t *, int64_t); 24STATIC_INLINE void set_visited(uint8_t *, int64_t);
25 25
26_static size_t gendata_cocsep(void *, uint64_t *, cube_t *); 26STATIC size_t gendata_cocsep(void *, uint64_t *, cube_t *);
27_static uint32_t gendata_cocsep_dfs(cocsep_dfs_arg_t *); 27STATIC uint32_t gendata_cocsep_dfs(cocsep_dfs_arg_t *);
28 28
29_static_inline int8_t get_h48_cdata(cube_t, uint32_t *, uint32_t *); 29STATIC_INLINE int8_t get_h48_cdata(cube_t, uint32_t *, uint32_t *);
30 30
31/* 31/*
32Each element of the cocsep table is a uint32_t used as follows: 32Each element of the cocsep table is a uint32_t used as follows:
@@ -39,7 +39,7 @@ After the data as described above, more auxiliary information is appended:
39 - One uint32_t for each "line" of the pruning table, representing the number 39 - One uint32_t for each "line" of the pruning table, representing the number
40 of positions having that pruning value. 40 of positions having that pruning value.
41*/ 41*/
42_static size_t 42STATIC size_t
43gendata_cocsep(void *buf, uint64_t *selfsim, cube_t *rep) 43gendata_cocsep(void *buf, uint64_t *selfsim, cube_t *rep)
44{ 44{
45 uint32_t *buf32, *info, cc; 45 uint32_t *buf32, *info, cc;
@@ -91,7 +91,7 @@ gendata_cocsep_return_size:
91 return COCSEP_FULLSIZE; 91 return COCSEP_FULLSIZE;
92} 92}
93 93
94_static uint32_t 94STATIC uint32_t
95gendata_cocsep_dfs(cocsep_dfs_arg_t *arg) 95gendata_cocsep_dfs(cocsep_dfs_arg_t *arg)
96{ 96{
97 uint8_t m; 97 uint8_t m;
@@ -145,19 +145,19 @@ gendata_cocsep_dfs(cocsep_dfs_arg_t *arg)
145 return cc; 145 return cc;
146} 146}
147 147
148_static_inline bool 148STATIC_INLINE bool
149get_visited(const uint8_t *a, int64_t i) 149get_visited(const uint8_t *a, int64_t i)
150{ 150{
151 return a[VISITED_IND(i)] & VISITED_MASK(i); 151 return a[VISITED_IND(i)] & VISITED_MASK(i);
152} 152}
153 153
154_static_inline void 154STATIC_INLINE void
155set_visited(uint8_t *a, int64_t i) 155set_visited(uint8_t *a, int64_t i)
156{ 156{
157 a[VISITED_IND(i)] |= VISITED_MASK(i); 157 a[VISITED_IND(i)] |= VISITED_MASK(i);
158} 158}
159 159
160_static_inline int8_t 160STATIC_INLINE int8_t
161get_h48_cdata(cube_t cube, uint32_t *cocsepdata, uint32_t *cdata) 161get_h48_cdata(cube_t cube, uint32_t *cocsepdata, uint32_t *cdata)
162{ 162{
163 int64_t coord; 163 int64_t coord;
diff --git a/src/solvers/h48/gendata_h48.h b/src/solvers/h48/gendata_h48.h
index 6486834..0778b3c 100644
--- a/src/solvers/h48/gendata_h48.h
+++ b/src/solvers/h48/gendata_h48.h
@@ -1,4 +1,4 @@
1#define H48_COORDMAX_NOEO ((int64_t)(COCSEP_CLASSES * _12c4 * _8c4)) 1#define H48_COORDMAX_NOEO ((int64_t)(COCSEP_CLASSES * COMB_12_4 * COMB_8_4))
2#define H48_COORDMAX(h) ((int64_t)(H48_COORDMAX_NOEO << (int64_t)(h))) 2#define H48_COORDMAX(h) ((int64_t)(H48_COORDMAX_NOEO << (int64_t)(h)))
3#define H48_DIV(k) ((size_t)8 / (size_t)(k)) 3#define H48_DIV(k) ((size_t)8 / (size_t)(k))
4#define H48_TABLESIZE(h, k) _div_round_up((size_t)H48_COORDMAX((h)), H48_DIV(k)) 4#define H48_TABLESIZE(h, k) _div_round_up((size_t)H48_COORDMAX((h)), H48_DIV(k))
@@ -6,7 +6,7 @@
6#define H48_COEFF(k) (UINT32_C(32) / (uint32_t)(k)) 6#define H48_COEFF(k) (UINT32_C(32) / (uint32_t)(k))
7#define H48_INDEX(i, k) ((uint32_t)(i) / H48_COEFF(k)) 7#define H48_INDEX(i, k) ((uint32_t)(i) / H48_COEFF(k))
8#define H48_SHIFT(i, k) ((uint32_t)(k) * ((uint32_t)(i) % H48_COEFF(k))) 8#define H48_SHIFT(i, k) ((uint32_t)(k) * ((uint32_t)(i) % H48_COEFF(k)))
9#define H48_MASK(i, k) ((_bit_u32(k) - (uint32_t)(1)) << H48_SHIFT(i, k)) 9#define H48_MASK(i, k) ((UINT32_BIT(k) - (uint32_t)(1)) << H48_SHIFT(i, k))
10 10
11#define MAXLEN 20 11#define MAXLEN 20
12 12
@@ -74,21 +74,21 @@ typedef struct {
74 h48map_t *shortcubes; 74 h48map_t *shortcubes;
75} h48k2_dfs_arg_t; 75} h48k2_dfs_arg_t;
76 76
77_static_inline uint8_t get_esep_pval(const uint32_t *, int64_t, uint8_t); 77STATIC_INLINE uint8_t get_esep_pval(const uint32_t *, int64_t, uint8_t);
78_static_inline void set_esep_pval(uint32_t *, int64_t, uint8_t, uint8_t); 78STATIC_INLINE void set_esep_pval(uint32_t *, int64_t, uint8_t, uint8_t);
79 79
80_static uint64_t gen_h48short(gendata_h48short_arg_t *); 80STATIC uint64_t gen_h48short(gendata_h48short_arg_t *);
81_static size_t gendata_h48(gendata_h48_arg_t *); 81STATIC size_t gendata_h48(gendata_h48_arg_t *);
82_static size_t gendata_h48h0k4(gendata_h48_arg_t *); 82STATIC size_t gendata_h48h0k4(gendata_h48_arg_t *);
83_static int64_t gendata_h48h0k4_bfs(h48h0k4_bfs_arg_t *); 83STATIC int64_t gendata_h48h0k4_bfs(h48h0k4_bfs_arg_t *);
84_static int64_t gendata_h48h0k4_bfs_fromdone(h48h0k4_bfs_arg_t *); 84STATIC int64_t gendata_h48h0k4_bfs_fromdone(h48h0k4_bfs_arg_t *);
85_static int64_t gendata_h48h0k4_bfs_fromnew(h48h0k4_bfs_arg_t *); 85STATIC int64_t gendata_h48h0k4_bfs_fromnew(h48h0k4_bfs_arg_t *);
86_static size_t gendata_h48k2(gendata_h48_arg_t *); 86STATIC size_t gendata_h48k2(gendata_h48_arg_t *);
87_static void gendata_h48k2_dfs(h48k2_dfs_arg_t *arg); 87STATIC void gendata_h48k2_dfs(h48k2_dfs_arg_t *arg);
88 88
89_static_inline int8_t get_h48_bound(cube_t, uint32_t, uint8_t, uint8_t, uint32_t *); 89STATIC_INLINE int8_t get_h48_bound(cube_t, uint32_t, uint8_t, uint8_t, uint32_t *);
90 90
91_static uint64_t 91STATIC uint64_t
92gen_h48short(gendata_h48short_arg_t *arg) 92gen_h48short(gendata_h48short_arg_t *arg)
93{ 93{
94 uint8_t i, m; 94 uint8_t i, m;
@@ -129,7 +129,7 @@ gen_h48short(gendata_h48short_arg_t *arg)
129} 129}
130 130
131/* Generic function that dispatches to the data generators */ 131/* Generic function that dispatches to the data generators */
132_static size_t 132STATIC size_t
133gendata_h48(gendata_h48_arg_t *arg) 133gendata_h48(gendata_h48_arg_t *arg)
134{ 134{
135 static const size_t infosize = 88; /* TODO: change to e.g. 1024 */ 135 static const size_t infosize = 88; /* TODO: change to e.g. 1024 */
@@ -164,7 +164,7 @@ gendata_h48(gendata_h48_arg_t *arg)
164TODO description 164TODO description
165generating fixed table with h=0, k=4 165generating fixed table with h=0, k=4
166*/ 166*/
167_static size_t 167STATIC size_t
168gendata_h48h0k4(gendata_h48_arg_t *arg) 168gendata_h48h0k4(gendata_h48_arg_t *arg)
169{ 169{
170 uint32_t j; 170 uint32_t j;
@@ -208,7 +208,7 @@ gendata_h48h0k4_return_size:
208 return H48_TABLESIZE(0, 4); 208 return H48_TABLESIZE(0, 4);
209} 209}
210 210
211_static int64_t 211STATIC int64_t
212gendata_h48h0k4_bfs(h48h0k4_bfs_arg_t *arg) 212gendata_h48h0k4_bfs(h48h0k4_bfs_arg_t *arg)
213{ 213{
214 const uint8_t breakpoint = 10; /* Hand-picked optimal */ 214 const uint8_t breakpoint = 10; /* Hand-picked optimal */
@@ -219,7 +219,7 @@ gendata_h48h0k4_bfs(h48h0k4_bfs_arg_t *arg)
219 return gendata_h48h0k4_bfs_fromnew(arg); 219 return gendata_h48h0k4_bfs_fromnew(arg);
220} 220}
221 221
222_static int64_t 222STATIC int64_t
223gendata_h48h0k4_bfs_fromdone(h48h0k4_bfs_arg_t *arg) 223gendata_h48h0k4_bfs_fromdone(h48h0k4_bfs_arg_t *arg)
224{ 224{
225 uint8_t c, m, x; 225 uint8_t c, m, x;
@@ -249,7 +249,7 @@ gendata_h48h0k4_bfs_fromdone(h48h0k4_bfs_arg_t *arg)
249 return cc; 249 return cc;
250} 250}
251 251
252_static int64_t 252STATIC int64_t
253gendata_h48h0k4_bfs_fromnew(h48h0k4_bfs_arg_t *arg) 253gendata_h48h0k4_bfs_fromnew(h48h0k4_bfs_arg_t *arg)
254{ 254{
255 uint8_t c, m, x; 255 uint8_t c, m, x;
@@ -281,7 +281,7 @@ gendata_h48h0k4_bfs_fromnew(h48h0k4_bfs_arg_t *arg)
281 return cc; 281 return cc;
282} 282}
283 283
284_static size_t 284STATIC size_t
285gendata_h48k2(gendata_h48_arg_t *arg) 285gendata_h48k2(gendata_h48_arg_t *arg)
286{ 286{
287 static const uint8_t shortdepth = 8; 287 static const uint8_t shortdepth = 8;
@@ -363,7 +363,7 @@ gendata_h48k2_return_size:
363 return H48_TABLESIZE(arg->h, 2); 363 return H48_TABLESIZE(arg->h, 2);
364} 364}
365 365
366_static void 366STATIC void
367gendata_h48k2_dfs(h48k2_dfs_arg_t *arg) 367gendata_h48k2_dfs(h48k2_dfs_arg_t *arg)
368{ 368{
369 cube_t ccc; 369 cube_t ccc;
@@ -406,20 +406,20 @@ gendata_h48k2_dfs(h48k2_dfs_arg_t *arg)
406 } 406 }
407} 407}
408 408
409_static_inline uint8_t 409STATIC_INLINE uint8_t
410get_esep_pval(const uint32_t *buf32, int64_t i, uint8_t k) 410get_esep_pval(const uint32_t *buf32, int64_t i, uint8_t k)
411{ 411{
412 return (buf32[H48_INDEX(i, k)] & H48_MASK(i, k)) >> H48_SHIFT(i, k); 412 return (buf32[H48_INDEX(i, k)] & H48_MASK(i, k)) >> H48_SHIFT(i, k);
413} 413}
414 414
415_static_inline void 415STATIC_INLINE void
416set_esep_pval(uint32_t *buf32, int64_t i, uint8_t k, uint8_t val) 416set_esep_pval(uint32_t *buf32, int64_t i, uint8_t k, uint8_t val)
417{ 417{
418 buf32[H48_INDEX(i, k)] = (buf32[H48_INDEX(i, k)] & (~H48_MASK(i, k))) 418 buf32[H48_INDEX(i, k)] = (buf32[H48_INDEX(i, k)] & (~H48_MASK(i, k)))
419 | (val << H48_SHIFT(i, k)); 419 | (val << H48_SHIFT(i, k));
420} 420}
421 421
422_static_inline int8_t 422STATIC_INLINE int8_t
423get_h48_bound(cube_t cube, uint32_t cdata, uint8_t h, uint8_t k, uint32_t *h48data) 423get_h48_bound(cube_t cube, uint32_t cdata, uint8_t h, uint8_t k, uint32_t *h48data)
424{ 424{
425 int64_t coord; 425 int64_t coord;
diff --git a/src/solvers/h48/map.h b/src/solvers/h48/map.h
index 0e9f926..34416fc 100644
--- a/src/solvers/h48/map.h
+++ b/src/solvers/h48/map.h
@@ -15,15 +15,15 @@ typedef struct {
15 uint64_t val; 15 uint64_t val;
16} kvpair_t; 16} kvpair_t;
17 17
18_static void h48map_create(h48map_t *, uint64_t, uint64_t); 18STATIC void h48map_create(h48map_t *, uint64_t, uint64_t);
19_static void h48map_clear(h48map_t *); 19STATIC void h48map_clear(h48map_t *);
20_static void h48map_destroy(h48map_t *); 20STATIC void h48map_destroy(h48map_t *);
21_static uint64_t h48map_lookup(h48map_t *, uint64_t); 21STATIC uint64_t h48map_lookup(h48map_t *, uint64_t);
22_static void h48map_insertmin(h48map_t *, uint64_t, uint64_t); 22STATIC void h48map_insertmin(h48map_t *, uint64_t, uint64_t);
23_static uint64_t h48map_value(h48map_t *, uint64_t); 23STATIC uint64_t h48map_value(h48map_t *, uint64_t);
24_static kvpair_t h48map_nextkvpair(h48map_t *, uint64_t *); 24STATIC kvpair_t h48map_nextkvpair(h48map_t *, uint64_t *);
25 25
26_static void 26STATIC void
27h48map_create(h48map_t *map, uint64_t capacity, uint64_t randomizer) 27h48map_create(h48map_t *map, uint64_t capacity, uint64_t randomizer)
28{ 28{
29 map->capacity = capacity; 29 map->capacity = capacity;
@@ -33,20 +33,20 @@ h48map_create(h48map_t *map, uint64_t capacity, uint64_t randomizer)
33 h48map_clear(map); 33 h48map_clear(map);
34} 34}
35 35
36_static void 36STATIC void
37h48map_clear(h48map_t *map) 37h48map_clear(h48map_t *map)
38{ 38{
39 memset(map->table, 0xFF, map->capacity * sizeof(uint64_t)); 39 memset(map->table, 0xFF, map->capacity * sizeof(uint64_t));
40 map->n = 0; 40 map->n = 0;
41} 41}
42 42
43_static void 43STATIC void
44h48map_destroy(h48map_t *map) 44h48map_destroy(h48map_t *map)
45{ 45{
46 free(map->table); 46 free(map->table);
47} 47}
48 48
49_static_inline uint64_t 49STATIC_INLINE uint64_t
50h48map_lookup(h48map_t *map, uint64_t x) 50h48map_lookup(h48map_t *map, uint64_t x)
51{ 51{
52 uint64_t hash, i; 52 uint64_t hash, i;
@@ -60,7 +60,7 @@ h48map_lookup(h48map_t *map, uint64_t x)
60 return i; 60 return i;
61} 61}
62 62
63_static_inline void 63STATIC_INLINE void
64h48map_insertmin(h48map_t *map, uint64_t key, uint64_t val) 64h48map_insertmin(h48map_t *map, uint64_t key, uint64_t val)
65{ 65{
66 uint64_t i, oldval, min; 66 uint64_t i, oldval, min;
@@ -73,13 +73,13 @@ h48map_insertmin(h48map_t *map, uint64_t key, uint64_t val)
73 map->table[i] = (key & MAP_KEYMASK) | (min << MAP_KEYSHIFT); 73 map->table[i] = (key & MAP_KEYMASK) | (min << MAP_KEYSHIFT);
74} 74}
75 75
76_static_inline uint64_t 76STATIC_INLINE uint64_t
77h48map_value(h48map_t *map, uint64_t key) 77h48map_value(h48map_t *map, uint64_t key)
78{ 78{
79 return map->table[h48map_lookup(map, key)] >> MAP_KEYSHIFT; 79 return map->table[h48map_lookup(map, key)] >> MAP_KEYSHIFT;
80} 80}
81 81
82_static kvpair_t 82STATIC kvpair_t
83h48map_nextkvpair(h48map_t *map, uint64_t *p) 83h48map_nextkvpair(h48map_t *map, uint64_t *p)
84{ 84{
85 kvpair_t kv; 85 kvpair_t kv;
diff --git a/src/solvers/h48/solve.h b/src/solvers/h48/solve.h
index 3878498..88c5a1e 100644
--- a/src/solvers/h48/solve.h
+++ b/src/solvers/h48/solve.h
@@ -26,22 +26,22 @@ typedef struct {
26 char *s; 26 char *s;
27} dfsarg_solveh48stats_t; 27} dfsarg_solveh48stats_t;
28 28
29_static uint32_t allowednextmove_h48(uint8_t *, uint8_t, uint32_t); 29STATIC uint32_t allowednextmove_h48(uint8_t *, uint8_t, uint32_t);
30 30
31_static void solve_h48_appendsolution(dfsarg_solveh48_t *); 31STATIC void solve_h48_appendsolution(dfsarg_solveh48_t *);
32_static_inline bool solve_h48_stop(dfsarg_solveh48_t *); 32STATIC_INLINE bool solve_h48_stop(dfsarg_solveh48_t *);
33_static int64_t solve_h48_dfs(dfsarg_solveh48_t *); 33STATIC int64_t solve_h48_dfs(dfsarg_solveh48_t *);
34_static int64_t solve_h48(cube_t, int8_t, int8_t, int8_t, uint8_t, uint8_t, const void *, char *); 34STATIC int64_t solve_h48(cube_t, int8_t, int8_t, int8_t, uint8_t, uint8_t, const void *, char *);
35 35
36_static int64_t solve_h48stats_dfs(dfsarg_solveh48stats_t *); 36STATIC int64_t solve_h48stats_dfs(dfsarg_solveh48stats_t *);
37_static int64_t solve_h48stats(cube_t, int8_t, const void *, char [static 12]); 37STATIC int64_t solve_h48stats(cube_t, int8_t, const void *, char [static 12]);
38 38
39_static uint32_t 39STATIC uint32_t
40allowednextmove_h48(uint8_t *moves, uint8_t n, uint32_t h48branch) 40allowednextmove_h48(uint8_t *moves, uint8_t n, uint32_t h48branch)
41{ 41{
42 uint32_t result = _mm_allmoves; 42 uint32_t result = MM_ALLMOVES;
43 if (h48branch & _mm_normalbranch) 43 if (h48branch & MM_NORMALBRANCH)
44 result &= _mm_nohalfturns; 44 result &= MM_NOHALFTURNS;
45 if (n < 1) 45 if (n < 1)
46 return result; 46 return result;
47 47
@@ -64,7 +64,7 @@ allowednextmove_h48(uint8_t *moves, uint8_t n, uint32_t h48branch)
64 return result; 64 return result;
65} 65}
66 66
67_static void 67STATIC void
68solve_h48_appendsolution(dfsarg_solveh48_t *arg) 68solve_h48_appendsolution(dfsarg_solveh48_t *arg)
69{ 69{
70 int strl; 70 int strl;
@@ -89,13 +89,13 @@ solve_h48_appendsolution(dfsarg_solveh48_t *arg)
89 (*arg->nsols)++; 89 (*arg->nsols)++;
90} 90}
91 91
92_static_inline bool 92STATIC_INLINE bool
93solve_h48_stop(dfsarg_solveh48_t *arg) 93solve_h48_stop(dfsarg_solveh48_t *arg)
94{ 94{
95 uint32_t data, data_inv; 95 uint32_t data, data_inv;
96 int8_t bound; 96 int8_t bound;
97 97
98 arg->nissbranch = _mm_normal; 98 arg->nissbranch = MM_NORMAL;
99 bound = get_h48_cdata(arg->cube, arg->cocsepdata, &data); 99 bound = get_h48_cdata(arg->cube, arg->cocsepdata, &data);
100 if (bound + arg->nmoves + arg->npremoves > arg->depth) 100 if (bound + arg->nmoves + arg->npremoves > arg->depth)
101 return true; 101 return true;
@@ -109,18 +109,18 @@ solve_h48_stop(dfsarg_solveh48_t *arg)
109 if (bound + arg->nmoves + arg->npremoves > arg->depth) 109 if (bound + arg->nmoves + arg->npremoves > arg->depth)
110 return true; 110 return true;
111 if (bound + arg->nmoves + arg->npremoves == arg->depth) 111 if (bound + arg->nmoves + arg->npremoves == arg->depth)
112 arg->nissbranch = _mm_inversebranch; 112 arg->nissbranch = MM_INVERSEBRANCH;
113 113
114 bound = get_h48_bound(arg->inverse, data_inv, arg->h, arg->k, arg->h48data); 114 bound = get_h48_bound(arg->inverse, data_inv, arg->h, arg->k, arg->h48data);
115 if (bound + arg->nmoves + arg->npremoves > arg->depth) 115 if (bound + arg->nmoves + arg->npremoves > arg->depth)
116 return true; 116 return true;
117 if (bound + arg->nmoves + arg->npremoves == arg->depth) 117 if (bound + arg->nmoves + arg->npremoves == arg->depth)
118 arg->nissbranch = _mm_normalbranch; 118 arg->nissbranch = MM_NORMALBRANCH;
119 119
120 return false; 120 return false;
121} 121}
122 122
123_static int64_t 123STATIC int64_t
124solve_h48_dfs(dfsarg_solveh48_t *arg) 124solve_h48_dfs(dfsarg_solveh48_t *arg)
125{ 125{
126 dfsarg_solveh48_t nextarg; 126 dfsarg_solveh48_t nextarg;
@@ -144,7 +144,7 @@ solve_h48_dfs(dfsarg_solveh48_t *arg)
144 nextarg = *arg; 144 nextarg = *arg;
145 ret = 0; 145 ret = 0;
146 uint32_t allowed; 146 uint32_t allowed;
147 if(arg->nissbranch & _mm_inverse) { 147 if(arg->nissbranch & MM_INVERSE) {
148 allowed = allowednextmove_h48(arg->premoves, arg->npremoves, arg->nissbranch); 148 allowed = allowednextmove_h48(arg->premoves, arg->npremoves, arg->nissbranch);
149 for (m = 0; m < 18; m++) { 149 for (m = 0; m < 18; m++) {
150 if(allowed & (1 << m)) { 150 if(allowed & (1 << m)) {
@@ -171,7 +171,7 @@ solve_h48_dfs(dfsarg_solveh48_t *arg)
171 return ret; 171 return ret;
172} 172}
173 173
174_static int64_t 174STATIC int64_t
175solve_h48( 175solve_h48(
176 cube_t cube, 176 cube_t cube,
177 int8_t minmoves, 177 int8_t minmoves,
@@ -219,7 +219,7 @@ each of the 12 h48 coordinates, one for each value of h from 0 to 11.
219The solutions array is filled with the length of the solutions. The 219The solutions array is filled with the length of the solutions. The
220solution array is therefore not a printable string. 220solution array is therefore not a printable string.
221*/ 221*/
222_static int64_t 222STATIC int64_t
223solve_h48stats_dfs(dfsarg_solveh48stats_t *arg) 223solve_h48stats_dfs(dfsarg_solveh48stats_t *arg)
224{ 224{
225 const int64_t limit = 11; 225 const int64_t limit = 11;
@@ -268,7 +268,7 @@ solve_h48stats_dfs(dfsarg_solveh48stats_t *arg)
268 return 0; 268 return 0;
269} 269}
270 270
271_static int64_t 271STATIC int64_t
272solve_h48stats( 272solve_h48stats(
273 cube_t cube, 273 cube_t cube,
274 int8_t maxmoves, 274 int8_t maxmoves,
diff --git a/src/utils/constants.h b/src/utils/constants.h
index 34b4f00..6d0683e 100644
--- a/src/utils/constants.h
+++ b/src/utils/constants.h
@@ -1,19 +1,15 @@
1#define _bit_u8(i) (UINT8_C(1) << (uint8_t)(i)) 1#define UINT32_BIT(i) (UINT32_C(1) << (uint32_t)(i))
2#define _bit_u32(i) (UINT32_C(1) << (uint32_t)(i))
3#define _bit_u64(i) (UINT64_C(1) << (uint64_t)(i))
4 2
5#define _max_factorial INT64_C(12) 3#define FACTORIAL_MAX INT64_C(12)
6 4
7#define _2p11 INT64_C(2048) 5#define POW_2_11 INT64_C(2048)
8#define _2p12 INT64_C(4096) 6#define POW_3_7 INT64_C(2187)
9#define _3p7 INT64_C(2187) 7#define FACT_12 INT64_C(479001600)
10#define _3p8 INT64_C(6561) 8#define FACT_8 INT64_C(40320)
11#define _12f INT64_C(479001600) 9#define COMB_12_4 INT64_C(495)
12#define _8f INT64_C(40320) 10#define COMB_8_4 INT64_C(70)
13#define _12c4 INT64_C(495)
14#define _8c4 INT64_C(70)
15 11
16_static int64_t binomial[12][12] = { 12STATIC int64_t binomial[12][12] = {
17 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 13 {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
18 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 14 {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
19 {1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15 {1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0},
@@ -28,275 +24,275 @@ _static int64_t binomial[12][12] = {
28 {1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1}, 24 {1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1},
29}; 25};
30 26
31#define _move_U UINT8_C(0) 27#define MOVE_U UINT8_C(0)
32#define _move_U2 UINT8_C(1) 28#define MOVE_U2 UINT8_C(1)
33#define _move_U3 UINT8_C(2) 29#define MOVE_U3 UINT8_C(2)
34#define _move_D UINT8_C(3) 30#define MOVE_D UINT8_C(3)
35#define _move_D2 UINT8_C(4) 31#define MOVE_D2 UINT8_C(4)
36#define _move_D3 UINT8_C(5) 32#define MOVE_D3 UINT8_C(5)
37#define _move_R UINT8_C(6) 33#define MOVE_R UINT8_C(6)
38#define _move_R2 UINT8_C(7) 34#define MOVE_R2 UINT8_C(7)
39#define _move_R3 UINT8_C(8) 35#define MOVE_R3 UINT8_C(8)
40#define _move_L UINT8_C(9) 36#define MOVE_L UINT8_C(9)
41#define _move_L2 UINT8_C(10) 37#define MOVE_L2 UINT8_C(10)
42#define _move_L3 UINT8_C(11) 38#define MOVE_L3 UINT8_C(11)
43#define _move_F UINT8_C(12) 39#define MOVE_F UINT8_C(12)
44#define _move_F2 UINT8_C(13) 40#define MOVE_F2 UINT8_C(13)
45#define _move_F3 UINT8_C(14) 41#define MOVE_F3 UINT8_C(14)
46#define _move_B UINT8_C(15) 42#define MOVE_B UINT8_C(15)
47#define _move_B2 UINT8_C(16) 43#define MOVE_B2 UINT8_C(16)
48#define _move_B3 UINT8_C(17) 44#define MOVE_B3 UINT8_C(17)
49 45
50#define _trans_UFr UINT8_C(0) 46#define TRANS_UFr UINT8_C(0)
51#define _trans_ULr UINT8_C(1) 47#define TRANS_ULr UINT8_C(1)
52#define _trans_UBr UINT8_C(2) 48#define TRANS_UBr UINT8_C(2)
53#define _trans_URr UINT8_C(3) 49#define TRANS_URr UINT8_C(3)
54#define _trans_DFr UINT8_C(4) 50#define TRANS_DFr UINT8_C(4)
55#define _trans_DLr UINT8_C(5) 51#define TRANS_DLr UINT8_C(5)
56#define _trans_DBr UINT8_C(6) 52#define TRANS_DBr UINT8_C(6)
57#define _trans_DRr UINT8_C(7) 53#define TRANS_DRr UINT8_C(7)
58#define _trans_RUr UINT8_C(8) 54#define TRANS_RUr UINT8_C(8)
59#define _trans_RFr UINT8_C(9) 55#define TRANS_RFr UINT8_C(9)
60#define _trans_RDr UINT8_C(10) 56#define TRANS_RDr UINT8_C(10)
61#define _trans_RBr UINT8_C(11) 57#define TRANS_RBr UINT8_C(11)
62#define _trans_LUr UINT8_C(12) 58#define TRANS_LUr UINT8_C(12)
63#define _trans_LFr UINT8_C(13) 59#define TRANS_LFr UINT8_C(13)
64#define _trans_LDr UINT8_C(14) 60#define TRANS_LDr UINT8_C(14)
65#define _trans_LBr UINT8_C(15) 61#define TRANS_LBr UINT8_C(15)
66#define _trans_FUr UINT8_C(16) 62#define TRANS_FUr UINT8_C(16)
67#define _trans_FRr UINT8_C(17) 63#define TRANS_FRr UINT8_C(17)
68#define _trans_FDr UINT8_C(18) 64#define TRANS_FDr UINT8_C(18)
69#define _trans_FLr UINT8_C(19) 65#define TRANS_FLr UINT8_C(19)
70#define _trans_BUr UINT8_C(20) 66#define TRANS_BUr UINT8_C(20)
71#define _trans_BRr UINT8_C(21) 67#define TRANS_BRr UINT8_C(21)
72#define _trans_BDr UINT8_C(22) 68#define TRANS_BDr UINT8_C(22)
73#define _trans_BLr UINT8_C(23) 69#define TRANS_BLr UINT8_C(23)
74 70
75#define _trans_UFm UINT8_C(24) 71#define TRANS_UFm UINT8_C(24)
76#define _trans_ULm UINT8_C(25) 72#define TRANS_ULm UINT8_C(25)
77#define _trans_UBm UINT8_C(26) 73#define TRANS_UBm UINT8_C(26)
78#define _trans_URm UINT8_C(27) 74#define TRANS_URm UINT8_C(27)
79#define _trans_DFm UINT8_C(28) 75#define TRANS_DFm UINT8_C(28)
80#define _trans_DLm UINT8_C(29) 76#define TRANS_DLm UINT8_C(29)
81#define _trans_DBm UINT8_C(30) 77#define TRANS_DBm UINT8_C(30)
82#define _trans_DRm UINT8_C(31) 78#define TRANS_DRm UINT8_C(31)
83#define _trans_RUm UINT8_C(32) 79#define TRANS_RUm UINT8_C(32)
84#define _trans_RFm UINT8_C(33) 80#define TRANS_RFm UINT8_C(33)
85#define _trans_RDm UINT8_C(34) 81#define TRANS_RDm UINT8_C(34)
86#define _trans_RBm UINT8_C(35) 82#define TRANS_RBm UINT8_C(35)
87#define _trans_LUm UINT8_C(36) 83#define TRANS_LUm UINT8_C(36)
88#define _trans_LFm UINT8_C(37) 84#define TRANS_LFm UINT8_C(37)
89#define _trans_LDm UINT8_C(38) 85#define TRANS_LDm UINT8_C(38)
90#define _trans_LBm UINT8_C(39) 86#define TRANS_LBm UINT8_C(39)
91#define _trans_FUm UINT8_C(40) 87#define TRANS_FUm UINT8_C(40)
92#define _trans_FRm UINT8_C(41) 88#define TRANS_FRm UINT8_C(41)
93#define _trans_FDm UINT8_C(42) 89#define TRANS_FDm UINT8_C(42)
94#define _trans_FLm UINT8_C(43) 90#define TRANS_FLm UINT8_C(43)
95#define _trans_BUm UINT8_C(44) 91#define TRANS_BUm UINT8_C(44)
96#define _trans_BRm UINT8_C(45) 92#define TRANS_BRm UINT8_C(45)
97#define _trans_BDm UINT8_C(46) 93#define TRANS_BDm UINT8_C(46)
98#define _trans_BLm UINT8_C(47) 94#define TRANS_BLm UINT8_C(47)
99 95
100#define _mm_normal UINT32_C(0x00) 96#define MM_NORMAL UINT32_C(0x00)
101#define _mm_inverse UINT32_C(0x01) 97#define MM_INVERSE UINT32_C(0x01)
102#define _mm_inversebranch UINT32_C(0x03) 98#define MM_INVERSEBRANCH UINT32_C(0x03)
103#define _mm_normalbranch UINT32_C(0x02) 99#define MM_NORMALBRANCH UINT32_C(0x02)
104#define _mm_allmoves UINT32_C(0x3FFFF) 100#define MM_ALLMOVES UINT32_C(0x3FFFF)
105#define _mm_nohalfturns UINT32_C(0x2DB6D) 101#define MM_NOHALFTURNS UINT32_C(0x2DB6D)
106 102
107#define _c_ufr UINT8_C(0) 103#define CORNER_UFR UINT8_C(0)
108#define _c_ubl UINT8_C(1) 104#define CORNER_UBL UINT8_C(1)
109#define _c_dfl UINT8_C(2) 105#define CORNER_DFL UINT8_C(2)
110#define _c_dbr UINT8_C(3) 106#define CORNER_DBR UINT8_C(3)
111#define _c_ufl UINT8_C(4) 107#define CORNER_UFL UINT8_C(4)
112#define _c_ubr UINT8_C(5) 108#define CORNER_UBR UINT8_C(5)
113#define _c_dfr UINT8_C(6) 109#define CORNER_DFR UINT8_C(6)
114#define _c_dbl UINT8_C(7) 110#define CORNER_DBL UINT8_C(7)
115 111
116#define _e_uf UINT8_C(0) 112#define EDGE_UF UINT8_C(0)
117#define _e_ub UINT8_C(1) 113#define EDGE_UB UINT8_C(1)
118#define _e_db UINT8_C(2) 114#define EDGE_DB UINT8_C(2)
119#define _e_df UINT8_C(3) 115#define EDGE_DF UINT8_C(3)
120#define _e_ur UINT8_C(4) 116#define EDGE_UR UINT8_C(4)
121#define _e_ul UINT8_C(5) 117#define EDGE_UL UINT8_C(5)
122#define _e_dl UINT8_C(6) 118#define EDGE_DL UINT8_C(6)
123#define _e_dr UINT8_C(7) 119#define EDGE_DR UINT8_C(7)
124#define _e_fr UINT8_C(8) 120#define EDGE_FR UINT8_C(8)
125#define _e_fl UINT8_C(9) 121#define EDGE_FL UINT8_C(9)
126#define _e_bl UINT8_C(10) 122#define EDGE_BL UINT8_C(10)
127#define _e_br UINT8_C(11) 123#define EDGE_BR UINT8_C(11)
128 124
129#define _eoshift UINT8_C(4) 125#define EOSHIFT UINT8_C(4)
130#define _coshift UINT8_C(5) 126#define COSHIFT UINT8_C(5)
131 127
132#define _pbits UINT8_C(0xF) 128#define PBITS UINT8_C(0xF)
133#define _esepbit1 UINT8_C(0x4) 129#define ESEPBIT_1 UINT8_C(0x4)
134#define _esepbit2 UINT8_C(0x8) 130#define ESEPBIT_2 UINT8_C(0x8)
135#define _csepbit UINT8_C(0x4) 131#define CSEPBIT UINT8_C(0x4)
136#define _eobit UINT8_C(0x10) 132#define EOBIT UINT8_C(0x10)
137#define _cobits UINT8_C(0xF0) 133#define COBITS UINT8_C(0xF0)
138#define _cobits2 UINT8_C(0x60) 134#define COBITS_2 UINT8_C(0x60)
139#define _ctwist_cw UINT8_C(0x20) 135#define CTWIST_CW UINT8_C(0x20)
140#define _ctwist_ccw UINT8_C(0x40) 136#define CTWIST_CCW UINT8_C(0x40)
141#define _eflip UINT8_C(0x10) 137#define EFLIP UINT8_C(0x10)
142#define _error UINT8_C(0xFF) 138#define UINT8_ERROR UINT8_C(0xFF)
143 139
144_static const char *cornerstr[] = { 140STATIC const char *cornerstr[] = {
145 [_c_ufr] = "UFR", 141 [CORNER_UFR] = "UFR",
146 [_c_ubl] = "UBL", 142 [CORNER_UBL] = "UBL",
147 [_c_dfl] = "DFL", 143 [CORNER_DFL] = "DFL",
148 [_c_dbr] = "DBR", 144 [CORNER_DBR] = "DBR",
149 [_c_ufl] = "UFL", 145 [CORNER_UFL] = "UFL",
150 [_c_ubr] = "UBR", 146 [CORNER_UBR] = "UBR",
151 [_c_dfr] = "DFR", 147 [CORNER_DFR] = "DFR",
152 [_c_dbl] = "DBL" 148 [CORNER_DBL] = "DBL"
153}; 149};
154 150
155_static const char *cornerstralt[] = { 151STATIC const char *cornerstralt[] = {
156 [_c_ufr] = "URF", 152 [CORNER_UFR] = "URF",
157 [_c_ubl] = "ULB", 153 [CORNER_UBL] = "ULB",
158 [_c_dfl] = "DLF", 154 [CORNER_DFL] = "DLF",
159 [_c_dbr] = "DRB", 155 [CORNER_DBR] = "DRB",
160 [_c_ufl] = "ULF", 156 [CORNER_UFL] = "ULF",
161 [_c_ubr] = "URB", 157 [CORNER_UBR] = "URB",
162 [_c_dfr] = "DRF", 158 [CORNER_DFR] = "DRF",
163 [_c_dbl] = "DLB" 159 [CORNER_DBL] = "DLB"
164}; 160};
165 161
166_static const char *edgestr[] = { 162STATIC const char *edgestr[] = {
167 [_e_uf] = "UF", 163 [EDGE_UF] = "UF",
168 [_e_ub] = "UB", 164 [EDGE_UB] = "UB",
169 [_e_db] = "DB", 165 [EDGE_DB] = "DB",
170 [_e_df] = "DF", 166 [EDGE_DF] = "DF",
171 [_e_ur] = "UR", 167 [EDGE_UR] = "UR",
172 [_e_ul] = "UL", 168 [EDGE_UL] = "UL",
173 [_e_dl] = "DL", 169 [EDGE_DL] = "DL",
174 [_e_dr] = "DR", 170 [EDGE_DR] = "DR",
175 [_e_fr] = "FR", 171 [EDGE_FR] = "FR",
176 [_e_fl] = "FL", 172 [EDGE_FL] = "FL",
177 [_e_bl] = "BL", 173 [EDGE_BL] = "BL",
178 [_e_br] = "BR" 174 [EDGE_BR] = "BR"
179}; 175};
180 176
181_static const char *movestr[] = { 177STATIC const char *movestr[] = {
182 [_move_U] = "U", 178 [MOVE_U] = "U",
183 [_move_U2] = "U2", 179 [MOVE_U2] = "U2",
184 [_move_U3] = "U'", 180 [MOVE_U3] = "U'",
185 [_move_D] = "D", 181 [MOVE_D] = "D",
186 [_move_D2] = "D2", 182 [MOVE_D2] = "D2",
187 [_move_D3] = "D'", 183 [MOVE_D3] = "D'",
188 [_move_R] = "R", 184 [MOVE_R] = "R",
189 [_move_R2] = "R2", 185 [MOVE_R2] = "R2",
190 [_move_R3] = "R'", 186 [MOVE_R3] = "R'",
191 [_move_L] = "L", 187 [MOVE_L] = "L",
192 [_move_L2] = "L2", 188 [MOVE_L2] = "L2",
193 [_move_L3] = "L'", 189 [MOVE_L3] = "L'",
194 [_move_F] = "F", 190 [MOVE_F] = "F",
195 [_move_F2] = "F2", 191 [MOVE_F2] = "F2",
196 [_move_F3] = "F'", 192 [MOVE_F3] = "F'",
197 [_move_B] = "B", 193 [MOVE_B] = "B",
198 [_move_B2] = "B2", 194 [MOVE_B2] = "B2",
199 [_move_B3] = "B'", 195 [MOVE_B3] = "B'",
200}; 196};
201 197
202_static const char *transstr[] = { 198STATIC const char *transstr[] = {
203 [_trans_UFr] = "rotation UF", 199 [TRANS_UFr] = "rotation UF",
204 [_trans_UFm] = "mirrored UF", 200 [TRANS_UFm] = "mirrored UF",
205 [_trans_ULr] = "rotation UL", 201 [TRANS_ULr] = "rotation UL",
206 [_trans_ULm] = "mirrored UL", 202 [TRANS_ULm] = "mirrored UL",
207 [_trans_UBr] = "rotation UB", 203 [TRANS_UBr] = "rotation UB",
208 [_trans_UBm] = "mirrored UB", 204 [TRANS_UBm] = "mirrored UB",
209 [_trans_URr] = "rotation UR", 205 [TRANS_URr] = "rotation UR",
210 [_trans_URm] = "mirrored UR", 206 [TRANS_URm] = "mirrored UR",
211 [_trans_DFr] = "rotation DF", 207 [TRANS_DFr] = "rotation DF",
212 [_trans_DFm] = "mirrored DF", 208 [TRANS_DFm] = "mirrored DF",
213 [_trans_DLr] = "rotation DL", 209 [TRANS_DLr] = "rotation DL",
214 [_trans_DLm] = "mirrored DL", 210 [TRANS_DLm] = "mirrored DL",
215 [_trans_DBr] = "rotation DB", 211 [TRANS_DBr] = "rotation DB",
216 [_trans_DBm] = "mirrored DB", 212 [TRANS_DBm] = "mirrored DB",
217 [_trans_DRr] = "rotation DR", 213 [TRANS_DRr] = "rotation DR",
218 [_trans_DRm] = "mirrored DR", 214 [TRANS_DRm] = "mirrored DR",
219 [_trans_RUr] = "rotation RU", 215 [TRANS_RUr] = "rotation RU",
220 [_trans_RUm] = "mirrored RU", 216 [TRANS_RUm] = "mirrored RU",
221 [_trans_RFr] = "rotation RF", 217 [TRANS_RFr] = "rotation RF",
222 [_trans_RFm] = "mirrored RF", 218 [TRANS_RFm] = "mirrored RF",
223 [_trans_RDr] = "rotation RD", 219 [TRANS_RDr] = "rotation RD",
224 [_trans_RDm] = "mirrored RD", 220 [TRANS_RDm] = "mirrored RD",
225 [_trans_RBr] = "rotation RB", 221 [TRANS_RBr] = "rotation RB",
226 [_trans_RBm] = "mirrored RB", 222 [TRANS_RBm] = "mirrored RB",
227 [_trans_LUr] = "rotation LU", 223 [TRANS_LUr] = "rotation LU",
228 [_trans_LUm] = "mirrored LU", 224 [TRANS_LUm] = "mirrored LU",
229 [_trans_LFr] = "rotation LF", 225 [TRANS_LFr] = "rotation LF",
230 [_trans_LFm] = "mirrored LF", 226 [TRANS_LFm] = "mirrored LF",
231 [_trans_LDr] = "rotation LD", 227 [TRANS_LDr] = "rotation LD",
232 [_trans_LDm] = "mirrored LD", 228 [TRANS_LDm] = "mirrored LD",
233 [_trans_LBr] = "rotation LB", 229 [TRANS_LBr] = "rotation LB",
234 [_trans_LBm] = "mirrored LB", 230 [TRANS_LBm] = "mirrored LB",
235 [_trans_FUr] = "rotation FU", 231 [TRANS_FUr] = "rotation FU",
236 [_trans_FUm] = "mirrored FU", 232 [TRANS_FUm] = "mirrored FU",
237 [_trans_FRr] = "rotation FR", 233 [TRANS_FRr] = "rotation FR",
238 [_trans_FRm] = "mirrored FR", 234 [TRANS_FRm] = "mirrored FR",
239 [_trans_FDr] = "rotation FD", 235 [TRANS_FDr] = "rotation FD",
240 [_trans_FDm] = "mirrored FD", 236 [TRANS_FDm] = "mirrored FD",
241 [_trans_FLr] = "rotation FL", 237 [TRANS_FLr] = "rotation FL",
242 [_trans_FLm] = "mirrored FL", 238 [TRANS_FLm] = "mirrored FL",
243 [_trans_BUr] = "rotation BU", 239 [TRANS_BUr] = "rotation BU",
244 [_trans_BUm] = "mirrored BU", 240 [TRANS_BUm] = "mirrored BU",
245 [_trans_BRr] = "rotation BR", 241 [TRANS_BRr] = "rotation BR",
246 [_trans_BRm] = "mirrored BR", 242 [TRANS_BRm] = "mirrored BR",
247 [_trans_BDr] = "rotation BD", 243 [TRANS_BDr] = "rotation BD",
248 [_trans_BDm] = "mirrored BD", 244 [TRANS_BDm] = "mirrored BD",
249 [_trans_BLr] = "rotation BL", 245 [TRANS_BLr] = "rotation BL",
250 [_trans_BLm] = "mirrored BL", 246 [TRANS_BLm] = "mirrored BL",
251}; 247};
252 248
253static uint8_t inverse_trans_table[48] = { 249static uint8_t inverse_trans_table[48] = {
254 [_trans_UFr] = _trans_UFr, 250 [TRANS_UFr] = TRANS_UFr,
255 [_trans_UFm] = _trans_UFm, 251 [TRANS_UFm] = TRANS_UFm,
256 [_trans_ULr] = _trans_URr, 252 [TRANS_ULr] = TRANS_URr,
257 [_trans_ULm] = _trans_ULm, 253 [TRANS_ULm] = TRANS_ULm,
258 [_trans_UBr] = _trans_UBr, 254 [TRANS_UBr] = TRANS_UBr,
259 [_trans_UBm] = _trans_UBm, 255 [TRANS_UBm] = TRANS_UBm,
260 [_trans_URr] = _trans_ULr, 256 [TRANS_URr] = TRANS_ULr,
261 [_trans_URm] = _trans_URm, 257 [TRANS_URm] = TRANS_URm,
262 [_trans_DFr] = _trans_DFr, 258 [TRANS_DFr] = TRANS_DFr,
263 [_trans_DFm] = _trans_DFm, 259 [TRANS_DFm] = TRANS_DFm,
264 [_trans_DLr] = _trans_DLr, 260 [TRANS_DLr] = TRANS_DLr,
265 [_trans_DLm] = _trans_DRm, 261 [TRANS_DLm] = TRANS_DRm,
266 [_trans_DBr] = _trans_DBr, 262 [TRANS_DBr] = TRANS_DBr,
267 [_trans_DBm] = _trans_DBm, 263 [TRANS_DBm] = TRANS_DBm,
268 [_trans_DRr] = _trans_DRr, 264 [TRANS_DRr] = TRANS_DRr,
269 [_trans_DRm] = _trans_DLm, 265 [TRANS_DRm] = TRANS_DLm,
270 [_trans_RUr] = _trans_FRr, 266 [TRANS_RUr] = TRANS_FRr,
271 [_trans_RUm] = _trans_FLm, 267 [TRANS_RUm] = TRANS_FLm,
272 [_trans_RFr] = _trans_LFr, 268 [TRANS_RFr] = TRANS_LFr,
273 [_trans_RFm] = _trans_RFm, 269 [TRANS_RFm] = TRANS_RFm,
274 [_trans_RDr] = _trans_BLr, 270 [TRANS_RDr] = TRANS_BLr,
275 [_trans_RDm] = _trans_BRm, 271 [TRANS_RDm] = TRANS_BRm,
276 [_trans_RBr] = _trans_RBr, 272 [TRANS_RBr] = TRANS_RBr,
277 [_trans_RBm] = _trans_LBm, 273 [TRANS_RBm] = TRANS_LBm,
278 [_trans_LUr] = _trans_FLr, 274 [TRANS_LUr] = TRANS_FLr,
279 [_trans_LUm] = _trans_FRm, 275 [TRANS_LUm] = TRANS_FRm,
280 [_trans_LFr] = _trans_RFr, 276 [TRANS_LFr] = TRANS_RFr,
281 [_trans_LFm] = _trans_LFm, 277 [TRANS_LFm] = TRANS_LFm,
282 [_trans_LDr] = _trans_BRr, 278 [TRANS_LDr] = TRANS_BRr,
283 [_trans_LDm] = _trans_BLm, 279 [TRANS_LDm] = TRANS_BLm,
284 [_trans_LBr] = _trans_LBr, 280 [TRANS_LBr] = TRANS_LBr,
285 [_trans_LBm] = _trans_RBm, 281 [TRANS_LBm] = TRANS_RBm,
286 [_trans_FUr] = _trans_FUr, 282 [TRANS_FUr] = TRANS_FUr,
287 [_trans_FUm] = _trans_FUm, 283 [TRANS_FUm] = TRANS_FUm,
288 [_trans_FRr] = _trans_RUr, 284 [TRANS_FRr] = TRANS_RUr,
289 [_trans_FRm] = _trans_LUm, 285 [TRANS_FRm] = TRANS_LUm,
290 [_trans_FDr] = _trans_BUr, 286 [TRANS_FDr] = TRANS_BUr,
291 [_trans_FDm] = _trans_BUm, 287 [TRANS_FDm] = TRANS_BUm,
292 [_trans_FLr] = _trans_LUr, 288 [TRANS_FLr] = TRANS_LUr,
293 [_trans_FLm] = _trans_RUm, 289 [TRANS_FLm] = TRANS_RUm,
294 [_trans_BUr] = _trans_FDr, 290 [TRANS_BUr] = TRANS_FDr,
295 [_trans_BUm] = _trans_FDm, 291 [TRANS_BUm] = TRANS_FDm,
296 [_trans_BRr] = _trans_LDr, 292 [TRANS_BRr] = TRANS_LDr,
297 [_trans_BRm] = _trans_RDm, 293 [TRANS_BRm] = TRANS_RDm,
298 [_trans_BDr] = _trans_BDr, 294 [TRANS_BDr] = TRANS_BDr,
299 [_trans_BDm] = _trans_BDm, 295 [TRANS_BDm] = TRANS_BDm,
300 [_trans_BLr] = _trans_RDr, 296 [TRANS_BLr] = TRANS_RDr,
301 [_trans_BLm] = _trans_LDm, 297 [TRANS_BLm] = TRANS_LDm,
302}; 298};
diff --git a/src/utils/dbg_log.h b/src/utils/dbg_log.h
index 427eceb..f9b1d8a 100644
--- a/src/utils/dbg_log.h
+++ b/src/utils/dbg_log.h
@@ -3,14 +3,14 @@ void (*nissy_log)(const char *, ...);
3#define LOG(...) if (nissy_log != NULL) nissy_log(__VA_ARGS__); 3#define LOG(...) if (nissy_log != NULL) nissy_log(__VA_ARGS__);
4 4
5#ifdef DEBUG 5#ifdef DEBUG
6#define _static 6#define STATIC
7#define _static_inline 7#define STATIC_INLINE
8#define DBG_WARN(condition, ...) if (!(condition)) LOG(__VA_ARGS__); 8#define DBG_WARN(condition, ...) if (!(condition)) LOG(__VA_ARGS__);
9#define DBG_ASSERT(condition, retval, ...) \ 9#define DBG_ASSERT(condition, retval, ...) \
10 if (!(condition)) { LOG(__VA_ARGS__); return retval; } 10 if (!(condition)) { LOG(__VA_ARGS__); return retval; }
11#else 11#else
12#define _static static 12#define STATIC static
13#define _static_inline static inline 13#define STATIC_INLINE static inline
14#define DBG_WARN(condition, ...) 14#define DBG_WARN(condition, ...)
15#define DBG_ASSERT(condition, retval, ...) 15#define DBG_ASSERT(condition, retval, ...)
16#endif 16#endif
diff --git a/src/utils/math.h b/src/utils/math.h
index a361808..e6c2589 100644
--- a/src/utils/math.h
+++ b/src/utils/math.h
@@ -3,22 +3,22 @@
3#define _max(x, y) ((x) > (y) ? (x) : (y)) 3#define _max(x, y) ((x) > (y) ? (x) : (y))
4#define _div_round_up(n, d) (((n) + (d) - 1) / (d)) 4#define _div_round_up(n, d) (((n) + (d) - 1) / (d))
5 5
6_static int64_t factorial(int64_t); 6STATIC int64_t factorial(int64_t);
7_static bool isperm(uint8_t *, int64_t); 7STATIC bool isperm(uint8_t *, int64_t);
8_static int64_t permtoindex(uint8_t *, int64_t); 8STATIC int64_t permtoindex(uint8_t *, int64_t);
9_static void indextoperm(int64_t, int64_t, uint8_t *); 9STATIC void indextoperm(int64_t, int64_t, uint8_t *);
10_static int permsign(uint8_t *, int64_t); 10STATIC int permsign(uint8_t *, int64_t);
11_static int64_t digitstosumzero(uint8_t *, uint8_t, uint8_t); 11STATIC int64_t digitstosumzero(uint8_t *, uint8_t, uint8_t);
12_static void sumzerotodigits(int64_t, uint8_t, uint8_t, uint8_t *); 12STATIC void sumzerotodigits(int64_t, uint8_t, uint8_t, uint8_t *);
13 13
14_static int64_t 14STATIC int64_t
15factorial(int64_t n) 15factorial(int64_t n)
16{ 16{
17 int64_t i, ret; 17 int64_t i, ret;
18 18
19 if (n > _max_factorial) { 19 if (n > FACTORIAL_MAX) {
20 LOG("Error: won't compute factorial for n=%" PRId64 " because" 20 LOG("Error: won't compute factorial for n=%" PRId64 " because"
21 " it is larger than %" PRId64 "\n", n, _max_factorial); 21 " it is larger than %" PRId64 "\n", n, FACTORIAL_MAX);
22 return -1; 22 return -1;
23 } 23 }
24 24
@@ -31,15 +31,15 @@ factorial(int64_t n)
31 return ret; 31 return ret;
32} 32}
33 33
34_static bool 34STATIC bool
35isperm(uint8_t *a, int64_t n) 35isperm(uint8_t *a, int64_t n)
36{ 36{
37 int64_t i; 37 int64_t i;
38 bool aux[_max_factorial+1]; 38 bool aux[FACTORIAL_MAX+1];
39 39
40 if (n > _max_factorial) { 40 if (n > FACTORIAL_MAX) {
41 LOG("Error: won't compute 'isperm()' for n=%" PRId64 " because" 41 LOG("Error: won't compute 'isperm()' for n=%" PRId64 " because"
42 " it is larger than %" PRId64 "\n", n, _max_factorial); 42 " it is larger than %" PRId64 "\n", n, FACTORIAL_MAX);
43 return false; 43 return false;
44 } 44 }
45 45
@@ -59,15 +59,15 @@ isperm(uint8_t *a, int64_t n)
59 return true; 59 return true;
60} 60}
61 61
62_static int64_t 62STATIC int64_t
63permtoindex(uint8_t *a, int64_t n) 63permtoindex(uint8_t *a, int64_t n)
64{ 64{
65 int64_t i, j, c, ret; 65 int64_t i, j, c, ret;
66 66
67 if (n > _max_factorial) { 67 if (n > FACTORIAL_MAX) {
68 LOG("Error: won't compute 'permtoindex()' for n=%" PRId64 68 LOG("Error: won't compute 'permtoindex()' for n=%" PRId64
69 " because it is larger than %" PRId64 "\n", 69 " because it is larger than %" PRId64 "\n",
70 n, _max_factorial); 70 n, FACTORIAL_MAX);
71 return -1; 71 return -1;
72 } 72 }
73 73
@@ -83,16 +83,16 @@ permtoindex(uint8_t *a, int64_t n)
83 return ret; 83 return ret;
84} 84}
85 85
86_static void 86STATIC void
87indextoperm(int64_t p, int64_t n, uint8_t *r) 87indextoperm(int64_t p, int64_t n, uint8_t *r)
88{ 88{
89 int64_t i, j, c; 89 int64_t i, j, c;
90 uint8_t a[_max_factorial+1]; 90 uint8_t a[FACTORIAL_MAX+1];
91 91
92 if (n > _max_factorial) { 92 if (n > FACTORIAL_MAX) {
93 LOG("Error: won't compute 'permtoindex()' for n=%" PRId64 93 LOG("Error: won't compute 'permtoindex()' for n=%" PRId64
94 " because it is larger than %" PRId64 "\n", 94 " because it is larger than %" PRId64 "\n",
95 n, _max_factorial); 95 n, FACTORIAL_MAX);
96 goto indextoperm_error; 96 goto indextoperm_error;
97 } 97 }
98 98
@@ -115,10 +115,10 @@ indextoperm(int64_t p, int64_t n, uint8_t *r)
115 return; 115 return;
116 116
117indextoperm_error: 117indextoperm_error:
118 memset(r, _error, n); 118 memset(r, UINT8_ERROR, n);
119} 119}
120 120
121_static int 121STATIC int
122permsign(uint8_t *a, int64_t n) 122permsign(uint8_t *a, int64_t n)
123{ 123{
124 int i, j; 124 int i, j;
@@ -131,7 +131,7 @@ permsign(uint8_t *a, int64_t n)
131 return ret % 2; 131 return ret % 2;
132} 132}
133 133
134_static int64_t 134STATIC int64_t
135digitstosumzero(uint8_t *a, uint8_t n, uint8_t b) 135digitstosumzero(uint8_t *a, uint8_t n, uint8_t b)
136{ 136{
137 int64_t ret, p; 137 int64_t ret, p;
@@ -161,7 +161,7 @@ digitstosumzero(uint8_t *a, uint8_t n, uint8_t b)
161 return ret; 161 return ret;
162} 162}
163 163
164_static void 164STATIC void
165sumzerotodigits(int64_t d, uint8_t n, uint8_t b, uint8_t *a) 165sumzerotodigits(int64_t d, uint8_t n, uint8_t b, uint8_t *a)
166{ 166{
167 uint8_t sum; 167 uint8_t sum;
@@ -182,5 +182,5 @@ sumzerotodigits(int64_t d, uint8_t n, uint8_t b, uint8_t *a)
182 return; 182 return;
183 183
184digitstosumzero_error: 184digitstosumzero_error:
185 memset(a, _error, n); 185 memset(a, UINT8_ERROR, n);
186} 186}

Generated with cgit - Back to sebastiano.tronto.net