aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiano Tronto <sebastiano@tronto.net>2024-10-04 12:15:37 +0200
committerSebastiano Tronto <sebastiano@tronto.net>2024-10-04 12:15:37 +0200
commit0de1530f4cea21f2bc0a0e0f1cbf9da016c7bda5 (patch)
treea0a64424190588e5f734c257dd312e1f89fcd1eb
parent80b065f757240af7920862b3e09f32a6dc06d392 (diff)
downloadnissy-core-0de1530f4cea21f2bc0a0e0f1cbf9da016c7bda5.tar.gz
nissy-core-0de1530f4cea21f2bc0a0e0f1cbf9da016c7bda5.zip
Revert table-based transformations
Long live the giant switch!
-rw-r--r--src/arch/avx2.h42
-rw-r--r--src/arch/common.h7
-rw-r--r--src/arch/neon.h57
-rw-r--r--src/arch/portable.h49
-rw-r--r--src/core/constant_cubes.h456
-rw-r--r--src/core/core.h6
-rw-r--r--src/core/cube.h19
-rw-r--r--src/core/io_cube.h6
-rw-r--r--src/core/moves.h4
-rw-r--r--src/core/transform.h463
-rw-r--r--src/core/transform_with_switch.h354
11 files changed, 600 insertions, 863 deletions
diff --git a/src/arch/avx2.h b/src/arch/avx2.h
index 557ab49..2c3371e 100644
--- a/src/arch/avx2.h
+++ b/src/arch/avx2.h
@@ -6,6 +6,16 @@
6#define EO_AVX2 \ 6#define EO_AVX2 \
7 _mm256_set_epi64x(INT64_C(0x10101010), INT64_C(0x1010101010101010), 0, 0) 7 _mm256_set_epi64x(INT64_C(0x10101010), INT64_C(0x1010101010101010), 0, 0)
8 8
9#define STATIC_CUBE(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \
10 e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br) \
11 _mm256_set_epi8(0, 0, 0, 0, e_br, e_bl, e_fl, e_fr, \
12 e_dr, e_dl, e_ul, e_ur, e_df, e_db, e_ub, e_uf, \
13 0, 0, 0, 0, 0, 0, 0, 0, \
14 c_dbl, c_dfr, c_ubr, c_ufl, c_dbr, c_dfl, c_ubl, c_ufr)
15#define ZERO_CUBE _mm256_set_epi64x(0, 0, 0, 0)
16#define SOLVED_CUBE STATIC_CUBE( \
17 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
18
9STATIC void 19STATIC void
10pieces(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])
11{ 21{
@@ -16,38 +26,6 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
16 memcpy(e, aux+16, 12); 26 memcpy(e, aux+16, 12);
17} 27}
18 28
19STATIC_INLINE cube_t
20cubefrompieces(
21 uint8_t c_ufr,
22 uint8_t c_ubl,
23 uint8_t c_dfl,
24 uint8_t c_dbr,
25 uint8_t c_ufl,
26 uint8_t c_ubr,
27 uint8_t c_dfr,
28 uint8_t c_dbl,
29
30 uint8_t e_uf,
31 uint8_t e_ub,
32 uint8_t e_db,
33 uint8_t e_df,
34 uint8_t e_ur,
35 uint8_t e_ul,
36 uint8_t e_dl,
37 uint8_t e_dr,
38 uint8_t e_fr,
39 uint8_t e_fl,
40 uint8_t e_bl,
41 uint8_t e_br
42) {
43 return _mm256_set_epi8(
44 0, 0, 0, 0, e_br, e_bl, e_fl, e_fr,
45 e_dr, e_dl, e_ul, e_ur, e_df, e_db, e_ub, e_uf,
46 0, 0, 0, 0, 0, 0, 0, 0,
47 c_dbl, c_dfr, c_ubr, c_ufl, c_dbr, c_dfl, c_ubl, c_ufr
48 );
49}
50
51STATIC_INLINE bool 29STATIC_INLINE bool
52equal(cube_t c1, cube_t c2) 30equal(cube_t c1, cube_t c2)
53{ 31{
diff --git a/src/arch/common.h b/src/arch/common.h
index 1469b30..346403b 100644
--- a/src/arch/common.h
+++ b/src/arch/common.h
@@ -1,11 +1,4 @@
1#define ZERO_CUBE cubefrompieces( \
2 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
3#define SOLVED_CUBE cubefrompieces( \
4 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
5STATIC 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]);
6STATIC_INLINE cube_t cubefrompieces(uint8_t, uint8_t, uint8_t, uint8_t,
7 uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t,
8 uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t, uint8_t);
9STATIC_INLINE bool equal(cube_t, cube_t); 2STATIC_INLINE bool equal(cube_t, cube_t);
10STATIC_INLINE cube_t invertco(cube_t); 3STATIC_INLINE cube_t invertco(cube_t);
11STATIC_INLINE cube_t compose_epcpeo(cube_t, cube_t); 4STATIC_INLINE cube_t compose_epcpeo(cube_t, cube_t);
diff --git a/src/arch/neon.h b/src/arch/neon.h
index 9061422..acb75c3 100644
--- a/src/arch/neon.h
+++ b/src/arch/neon.h
@@ -7,6 +7,25 @@
7STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t); 7STATIC_INLINE uint8x16_t compose_edges_slim(uint8x16_t, uint8x16_t);
8STATIC_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
11#define STATIC_CUBE(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \
12 e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br) \
13 ((cube_t){ \
14 .corner = {c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, 0, 0, 0, 0, 0, 0, 0, 0}, \
15 .edge = {e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br, 0, 0, 0, 0}})
16
17// zero cube
18#define ZERO_CUBE \
19 (cube_t) \
20 { \
21 .corner = vdupq_n_u8(0), \
22 .edge = vdupq_n_u8(0) \
23 }
24
25// solved cube
26#define SOLVED_CUBE STATIC_CUBE( \
27 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
28
10STATIC void 29STATIC void
11pieces(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])
12{ 31{
@@ -20,44 +39,6 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
20 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);
21} 40}
22 41
23STATIC_INLINE cube_t
24cubefrompieces(
25 uint8_t c_ufr,
26 uint8_t c_ubl,
27 uint8_t c_dfl,
28 uint8_t c_dbr,
29 uint8_t c_ufl,
30 uint8_t c_ubr,
31 uint8_t c_dfr,
32 uint8_t c_dbl,
33
34 uint8_t e_uf,
35 uint8_t e_ub,
36 uint8_t e_db,
37 uint8_t e_df,
38 uint8_t e_ur,
39 uint8_t e_ul,
40 uint8_t e_dl,
41 uint8_t e_dr,
42 uint8_t e_fr,
43 uint8_t e_fl,
44 uint8_t e_bl,
45 uint8_t e_br
46) {
47 cube_t ret = {
48 .corner = {
49 c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl,
50 0, 0, 0, 0, 0, 0, 0, 0
51 },
52 .edge = {
53 e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr,
54 e_fl, e_bl, e_br, 0, 0, 0, 0
55 }
56 };
57
58 return ret;
59}
60
61STATIC_INLINE bool 42STATIC_INLINE bool
62equal(cube_t c1, cube_t c2) 43equal(cube_t c1, cube_t c2)
63{ 44{
diff --git a/src/arch/portable.h b/src/arch/portable.h
index 3776c90..e9a8dd0 100644
--- a/src/arch/portable.h
+++ b/src/arch/portable.h
@@ -1,3 +1,14 @@
1#define STATIC_CUBE(c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl, \
2 e_uf, e_ub, e_db, e_df, e_ur, e_ul, e_dl, e_dr, e_fr, e_fl, e_bl, e_br) \
3 ((cube_t) { \
4 .corner = { c_ufr, c_ubl, c_dfl, c_dbr, c_ufl, c_ubr, c_dfr, c_dbl }, \
5 .edge = { e_uf, e_ub, e_db, e_df, e_ur, e_ul, \
6 e_dl, e_dr, e_fr, e_fl, e_bl, e_br } })
7#define ZERO_CUBE STATIC_CUBE( \
8 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
9#define SOLVED_CUBE STATIC_CUBE( \
10 0, 1, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11)
11
1STATIC void 12STATIC void
2pieces(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])
3{ 14{
@@ -5,44 +16,6 @@ pieces(cube_t *cube, uint8_t c[static 8], uint8_t e[static 12])
5 memcpy(e, cube->edge, 12); 16 memcpy(e, cube->edge, 12);
6} 17}
7 18
8STATIC_INLINE cube_t
9cubefrompieces(
10 uint8_t c_ufr,
11 uint8_t c_ubl,
12 uint8_t c_dfl,
13 uint8_t c_dbr,
14 uint8_t c_ufl,
15 uint8_t c_ubr,
16 uint8_t c_dfr,
17 uint8_t c_dbl,
18
19 uint8_t e_uf,
20 uint8_t e_ub,
21 uint8_t e_db,
22 uint8_t e_df,
23 uint8_t e_ur,
24 uint8_t e_ul,
25 uint8_t e_dl,
26 uint8_t e_dr,
27 uint8_t e_fr,
28 uint8_t e_fl,
29 uint8_t e_bl,
30 uint8_t e_br
31) {
32 cube_t ret = {
33 .corner = {
34 0, 0, 0, 0, 0, 0, 0, 0,
35 c_dbl, c_dfr, c_ubr, c_ufl, c_dbr, c_dfl, c_ubl, c_ufr
36 },
37 .edge = {
38 0, 0, 0, 0, e_br, e_bl, e_fl, e_fr,
39 e_dr, e_dl, e_ul, e_ur, e_df, e_db, e_ub, e_uf
40 }
41 };
42
43 return ret;
44}
45
46STATIC_INLINE bool 19STATIC_INLINE bool
47equal(cube_t c1, cube_t c2) 20equal(cube_t c1, cube_t c2)
48{ 21{
diff --git a/src/core/constant_cubes.h b/src/core/constant_cubes.h
index f48597c..9657e1a 100644
--- a/src/core/constant_cubes.h
+++ b/src/core/constant_cubes.h
@@ -1,229 +1,229 @@
1#define MOVE_CUBE_U \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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 \ 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/core.h b/src/core/core.h
index 429039c..f041178 100644
--- a/src/core/core.h
+++ b/src/core/core.h
@@ -4,10 +4,4 @@
4#include "cube.h" 4#include "cube.h"
5#include "io_cube.h" 5#include "io_cube.h"
6#include "moves.h" 6#include "moves.h"
7
8/* TODO: work in progress */
9#if 1
10#include "transform.h" 7#include "transform.h"
11#else
12#include "transform_with_switch.h"
13#endif
diff --git a/src/core/cube.h b/src/core/cube.h
index 560d113..2252a85 100644
--- a/src/core/cube.h
+++ b/src/core/cube.h
@@ -1,6 +1,5 @@
1STATIC cube_t solvecube(void); 1STATIC cube_t solvecube(void);
2STATIC_INLINE cube_t cubefromarray_ce(uint8_t [static 8], uint8_t [static 12]); 2STATIC cube_t cubefromarray(uint8_t [static 8], uint8_t [static 12]);
3STATIC_INLINE cube_t cubefromarray_single(uint8_t [static 20]);
4STATIC bool isconsistent(cube_t); 3STATIC bool isconsistent(cube_t);
5STATIC bool issolvable(cube_t); 4STATIC bool issolvable(cube_t);
6STATIC bool issolved(cube_t); 5STATIC bool issolved(cube_t);
@@ -15,23 +14,15 @@ solvedcube(void)
15 return SOLVED_CUBE; 14 return SOLVED_CUBE;
16} 15}
17 16
18STATIC_INLINE cube_t 17STATIC cube_t
19cubefromarray_ce(uint8_t c[static 8], uint8_t e[static 12]) 18cubefromarray(uint8_t c[static 8], uint8_t e[static 12])
20{ 19{
21 return cubefrompieces( 20 return STATIC_CUBE(
22 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], 21 c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7],
23 e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], 22 e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7],
24 e[8], e[9], e[10], e[11]); 23 e[8], e[9], e[10], e[11]);
25} 24}
26 25
27STATIC_INLINE cube_t
28cubefromarray_single(uint8_t p[static 20])
29{
30 return cubefrompieces(
31 p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7], p[8], p[9], p[10],
32 p[11], p[12], p[13], p[14], p[15], p[16], p[17], p[18], p[19]);
33}
34
35STATIC bool 26STATIC bool
36isconsistent(cube_t cube) 27isconsistent(cube_t cube)
37{ 28{
@@ -187,5 +178,5 @@ getcube(int64_t ep, int64_t eo, int64_t cp, int64_t co)
187 for (i = 0; i < 8; i++) 178 for (i = 0; i < 8; i++)
188 carr[i] |= coarr[i] << COSHIFT; 179 carr[i] |= coarr[i] << COSHIFT;
189 180
190 return cubefromarray_ce(carr, earr); 181 return cubefromarray(carr, earr);
191} 182}
diff --git a/src/core/io_cube.h b/src/core/io_cube.h
index 58b332c..9ae82d7 100644
--- a/src/core/io_cube.h
+++ b/src/core/io_cube.h
@@ -143,7 +143,7 @@ readcube_B32(const char *buf)
143 "Error reading B32 edge %d (char %d)\n", i, i+9); 143 "Error reading B32 edge %d (char %d)\n", i, i+9);
144 } 144 }
145 145
146 return cubefromarray_ce(c, e); 146 return cubefromarray(c, e);
147} 147}
148 148
149STATIC cube_t 149STATIC cube_t
@@ -178,7 +178,7 @@ readcube_H48(const char *buf)
178 c[i] = piece | orient; 178 c[i] = piece | orient;
179 } 179 }
180 180
181 return cubefromarray_ce(c, e); 181 return cubefromarray(c, e);
182} 182}
183 183
184STATIC uint8_t 184STATIC uint8_t
@@ -210,7 +210,7 @@ readcube_LST(const char *buf)
210 for (i = 0; i < 12; i++) 210 for (i = 0; i < 12; i++)
211 e[i] = readpiece_LST(&buf); 211 e[i] = readpiece_LST(&buf);
212 212
213 return cubefromarray_ce(c, e); 213 return cubefromarray(c, e);
214} 214}
215 215
216STATIC int 216STATIC int
diff --git a/src/core/moves.h b/src/core/moves.h
index 4847f03..f0d7646 100644
--- a/src/core/moves.h
+++ b/src/core/moves.h
@@ -1,5 +1,5 @@
1#define MOVE(M, c) compose(c, cubefrompieces(MOVE_CUBE_ ## M)) 1#define MOVE(M, c) compose(c, MOVE_CUBE_ ## M)
2#define PREMOVE(M, c) compose(cubefrompieces(MOVE_CUBE_ ## M), c) 2#define PREMOVE(M, c) compose(MOVE_CUBE_ ## M, c)
3 3
4STATIC_INLINE bool allowednextmove(uint8_t *, uint8_t); 4STATIC_INLINE bool allowednextmove(uint8_t *, uint8_t);
5 5
diff --git a/src/core/transform.h b/src/core/transform.h
index f72e2af..83204d5 100644
--- a/src/core/transform.h
+++ b/src/core/transform.h
@@ -1,162 +1,343 @@
1#define TRANS_EDGES_ROTATION(T, c) \
2 compose_edges(compose_edges(TRANS_CUBE_ ## T, c), \
3 TRANS_CUBE_ ## T ## _INVERSE)
4#define TRANS_EDGES_MIRRORED(T, c) TRANS_EDGES_ROTATION(T, c)
5
6#define TRANS_CORNERS_ROTATION(T, c) \
7 compose_corners(compose_corners(TRANS_CUBE_ ## T, c), \
8 TRANS_CUBE_ ## T ## _INVERSE)
9#define TRANS_CORNERS_MIRRORED(T, c) \
10 invertco(compose_corners( \
11 compose_corners(TRANS_CUBE_ ## T, c), TRANS_CUBE_ ## T ## _INVERSE))
12
13#define TRANS_ROTATION(T, c) \
14 compose(compose(TRANS_CUBE_ ## T, c), \
15 TRANS_CUBE_ ## T ## _INVERSE)
16#define TRANS_MIRRORED(T, c) \
17 invertco(compose(compose(TRANS_CUBE_ ## T, c), \
18 TRANS_CUBE_ ## T ## _INVERSE))
19
1STATIC cube_t transform_edges(cube_t, uint8_t); 20STATIC cube_t transform_edges(cube_t, uint8_t);
2STATIC cube_t transform_corners(cube_t, uint8_t); 21STATIC cube_t transform_corners(cube_t, uint8_t);
3STATIC cube_t transform(cube_t, uint8_t); 22STATIC cube_t transform(cube_t, uint8_t);
4STATIC cube_t applytrans(cube_t, const char *); 23STATIC cube_t applytrans(cube_t, const char *);
5 24
6static uint8_t cube_trans_table[48][20] = {
7 [TRANS_UFr] = { TRANS_CUBE_UFr },
8 [TRANS_UFm] = { TRANS_CUBE_UFm },
9 [TRANS_ULr] = { TRANS_CUBE_ULr },
10 [TRANS_ULm] = { TRANS_CUBE_ULm },
11 [TRANS_UBr] = { TRANS_CUBE_UBr },
12 [TRANS_UBm] = { TRANS_CUBE_UBm },
13 [TRANS_URr] = { TRANS_CUBE_URr },
14 [TRANS_URm] = { TRANS_CUBE_URm },
15 [TRANS_DFr] = { TRANS_CUBE_DFr },
16 [TRANS_DFm] = { TRANS_CUBE_DFm },
17 [TRANS_DLr] = { TRANS_CUBE_DLr },
18 [TRANS_DLm] = { TRANS_CUBE_DLm },
19 [TRANS_DBr] = { TRANS_CUBE_DBr },
20 [TRANS_DBm] = { TRANS_CUBE_DBm },
21 [TRANS_DRr] = { TRANS_CUBE_DRr },
22 [TRANS_DRm] = { TRANS_CUBE_DRm },
23 [TRANS_RUr] = { TRANS_CUBE_RUr },
24 [TRANS_RUm] = { TRANS_CUBE_RUm },
25 [TRANS_RFr] = { TRANS_CUBE_RFr },
26 [TRANS_RFm] = { TRANS_CUBE_RFm },
27 [TRANS_RDr] = { TRANS_CUBE_RDr },
28 [TRANS_RDm] = { TRANS_CUBE_RDm },
29 [TRANS_RBr] = { TRANS_CUBE_RBr },
30 [TRANS_RBm] = { TRANS_CUBE_RBm },
31 [TRANS_LUr] = { TRANS_CUBE_LUr },
32 [TRANS_LUm] = { TRANS_CUBE_LUm },
33 [TRANS_LFr] = { TRANS_CUBE_LFr },
34 [TRANS_LFm] = { TRANS_CUBE_LFm },
35 [TRANS_LDr] = { TRANS_CUBE_LDr },
36 [TRANS_LDm] = { TRANS_CUBE_LDm },
37 [TRANS_LBr] = { TRANS_CUBE_LBr },
38 [TRANS_LBm] = { TRANS_CUBE_LBm },
39 [TRANS_FUr] = { TRANS_CUBE_FUr },
40 [TRANS_FUm] = { TRANS_CUBE_FUm },
41 [TRANS_FRr] = { TRANS_CUBE_FRr },
42 [TRANS_FRm] = { TRANS_CUBE_FRm },
43 [TRANS_FDr] = { TRANS_CUBE_FDr },
44 [TRANS_FDm] = { TRANS_CUBE_FDm },
45 [TRANS_FLr] = { TRANS_CUBE_FLr },
46 [TRANS_FLm] = { TRANS_CUBE_FLm },
47 [TRANS_BUr] = { TRANS_CUBE_BUr },
48 [TRANS_BUm] = { TRANS_CUBE_BUm },
49 [TRANS_BRr] = { TRANS_CUBE_BRr },
50 [TRANS_BRm] = { TRANS_CUBE_BRm },
51 [TRANS_BDr] = { TRANS_CUBE_BDr },
52 [TRANS_BDm] = { TRANS_CUBE_BDm },
53 [TRANS_BLr] = { TRANS_CUBE_BLr },
54 [TRANS_BLm] = { TRANS_CUBE_BLm },
55};
56
57static uint8_t cube_trans_table_inverse[48][20] = {
58 [TRANS_UFr] = { TRANS_CUBE_UFr_INVERSE },
59 [TRANS_UFm] = { TRANS_CUBE_UFm_INVERSE },
60 [TRANS_ULr] = { TRANS_CUBE_ULr_INVERSE },
61 [TRANS_ULm] = { TRANS_CUBE_ULm_INVERSE },
62 [TRANS_UBr] = { TRANS_CUBE_UBr_INVERSE },
63 [TRANS_UBm] = { TRANS_CUBE_UBm_INVERSE },
64 [TRANS_URr] = { TRANS_CUBE_URr_INVERSE },
65 [TRANS_URm] = { TRANS_CUBE_URm_INVERSE },
66 [TRANS_DFr] = { TRANS_CUBE_DFr_INVERSE },
67 [TRANS_DFm] = { TRANS_CUBE_DFm_INVERSE },
68 [TRANS_DLr] = { TRANS_CUBE_DLr_INVERSE },
69 [TRANS_DLm] = { TRANS_CUBE_DLm_INVERSE },
70 [TRANS_DBr] = { TRANS_CUBE_DBr_INVERSE },
71 [TRANS_DBm] = { TRANS_CUBE_DBm_INVERSE },
72 [TRANS_DRr] = { TRANS_CUBE_DRr_INVERSE },
73 [TRANS_DRm] = { TRANS_CUBE_DRm_INVERSE },
74 [TRANS_RUr] = { TRANS_CUBE_RUr_INVERSE },
75 [TRANS_RUm] = { TRANS_CUBE_RUm_INVERSE },
76 [TRANS_RFr] = { TRANS_CUBE_RFr_INVERSE },
77 [TRANS_RFm] = { TRANS_CUBE_RFm_INVERSE },
78 [TRANS_RDr] = { TRANS_CUBE_RDr_INVERSE },
79 [TRANS_RDm] = { TRANS_CUBE_RDm_INVERSE },
80 [TRANS_RBr] = { TRANS_CUBE_RBr_INVERSE },
81 [TRANS_RBm] = { TRANS_CUBE_RBm_INVERSE },
82 [TRANS_LUr] = { TRANS_CUBE_LUr_INVERSE },
83 [TRANS_LUm] = { TRANS_CUBE_LUm_INVERSE },
84 [TRANS_LFr] = { TRANS_CUBE_LFr_INVERSE },
85 [TRANS_LFm] = { TRANS_CUBE_LFm_INVERSE },
86 [TRANS_LDr] = { TRANS_CUBE_LDr_INVERSE },
87 [TRANS_LDm] = { TRANS_CUBE_LDm_INVERSE },
88 [TRANS_LBr] = { TRANS_CUBE_LBr_INVERSE },
89 [TRANS_LBm] = { TRANS_CUBE_LBm_INVERSE },
90 [TRANS_FUr] = { TRANS_CUBE_FUr_INVERSE },
91 [TRANS_FUm] = { TRANS_CUBE_FUm_INVERSE },
92 [TRANS_FRr] = { TRANS_CUBE_FRr_INVERSE },
93 [TRANS_FRm] = { TRANS_CUBE_FRm_INVERSE },
94 [TRANS_FDr] = { TRANS_CUBE_FDr_INVERSE },
95 [TRANS_FDm] = { TRANS_CUBE_FDm_INVERSE },
96 [TRANS_FLr] = { TRANS_CUBE_FLr_INVERSE },
97 [TRANS_FLm] = { TRANS_CUBE_FLm_INVERSE },
98 [TRANS_BUr] = { TRANS_CUBE_BUr_INVERSE },
99 [TRANS_BUm] = { TRANS_CUBE_BUm_INVERSE },
100 [TRANS_BRr] = { TRANS_CUBE_BRr_INVERSE },
101 [TRANS_BRm] = { TRANS_CUBE_BRm_INVERSE },
102 [TRANS_BDr] = { TRANS_CUBE_BDr_INVERSE },
103 [TRANS_BDm] = { TRANS_CUBE_BDm_INVERSE },
104 [TRANS_BLr] = { TRANS_CUBE_BLr_INVERSE },
105 [TRANS_BLm] = { TRANS_CUBE_BLm_INVERSE },
106};
107
108STATIC cube_t 25STATIC cube_t
109transform_edges(cube_t c, uint8_t t) 26transform_edges(cube_t c, uint8_t t)
110{ 27{
111 cube_t ret, trans_cube, trans_inv; 28 switch (t) {
112 29 case TRANS_UFr:
113 DBG_ASSERT(t < 48, ZERO_CUBE, 30 return c;
114 "transform: invalid transformation %" PRIu8 31 case TRANS_ULr:
115 ", must be between 0 and 47\n", t); 32 return TRANS_EDGES_ROTATION(ULr, c);
116 33 case TRANS_UBr:
117 trans_cube = cubefromarray_single(cube_trans_table[t]); 34 return TRANS_EDGES_ROTATION(UBr, c);
118 trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); 35 case TRANS_URr:
119 36 return TRANS_EDGES_ROTATION(URr, c);
120 ret = compose_edges(trans_cube, c); 37 case TRANS_DFr:
121 ret = compose_edges(ret, trans_inv); 38 return TRANS_EDGES_ROTATION(DFr, c);
122 39 case TRANS_DLr:
123 return ret; 40 return TRANS_EDGES_ROTATION(DLr, c);
41 case TRANS_DBr:
42 return TRANS_EDGES_ROTATION(DBr, c);
43 case TRANS_DRr:
44 return TRANS_EDGES_ROTATION(DRr, c);
45 case TRANS_RUr:
46 return TRANS_EDGES_ROTATION(RUr, c);
47 case TRANS_RFr:
48 return TRANS_EDGES_ROTATION(RFr, c);
49 case TRANS_RDr:
50 return TRANS_EDGES_ROTATION(RDr, c);
51 case TRANS_RBr:
52 return TRANS_EDGES_ROTATION(RBr, c);
53 case TRANS_LUr:
54 return TRANS_EDGES_ROTATION(LUr, c);
55 case TRANS_LFr:
56 return TRANS_EDGES_ROTATION(LFr, c);
57 case TRANS_LDr:
58 return TRANS_EDGES_ROTATION(LDr, c);
59 case TRANS_LBr:
60 return TRANS_EDGES_ROTATION(LBr, c);
61 case TRANS_FUr:
62 return TRANS_EDGES_ROTATION(FUr, c);
63 case TRANS_FRr:
64 return TRANS_EDGES_ROTATION(FRr, c);
65 case TRANS_FDr:
66 return TRANS_EDGES_ROTATION(FDr, c);
67 case TRANS_FLr:
68 return TRANS_EDGES_ROTATION(FLr, c);
69 case TRANS_BUr:
70 return TRANS_EDGES_ROTATION(BUr, c);
71 case TRANS_BRr:
72 return TRANS_EDGES_ROTATION(BRr, c);
73 case TRANS_BDr:
74 return TRANS_EDGES_ROTATION(BDr, c);
75 case TRANS_BLr:
76 return TRANS_EDGES_ROTATION(BLr, c);
77 case TRANS_UFm:
78 return TRANS_EDGES_MIRRORED(UFm, c);
79 case TRANS_ULm:
80 return TRANS_EDGES_MIRRORED(ULm, c);
81 case TRANS_UBm:
82 return TRANS_EDGES_MIRRORED(UBm, c);
83 case TRANS_URm:
84 return TRANS_EDGES_MIRRORED(URm, c);
85 case TRANS_DFm:
86 return TRANS_EDGES_MIRRORED(DFm, c);
87 case TRANS_DLm:
88 return TRANS_EDGES_MIRRORED(DLm, c);
89 case TRANS_DBm:
90 return TRANS_EDGES_MIRRORED(DBm, c);
91 case TRANS_DRm:
92 return TRANS_EDGES_MIRRORED(DRm, c);
93 case TRANS_RUm:
94 return TRANS_EDGES_MIRRORED(RUm, c);
95 case TRANS_RFm:
96 return TRANS_EDGES_MIRRORED(RFm, c);
97 case TRANS_RDm:
98 return TRANS_EDGES_MIRRORED(RDm, c);
99 case TRANS_RBm:
100 return TRANS_EDGES_MIRRORED(RBm, c);
101 case TRANS_LUm:
102 return TRANS_EDGES_MIRRORED(LUm, c);
103 case TRANS_LFm:
104 return TRANS_EDGES_MIRRORED(LFm, c);
105 case TRANS_LDm:
106 return TRANS_EDGES_MIRRORED(LDm, c);
107 case TRANS_LBm:
108 return TRANS_EDGES_MIRRORED(LBm, c);
109 case TRANS_FUm:
110 return TRANS_EDGES_MIRRORED(FUm, c);
111 case TRANS_FRm:
112 return TRANS_EDGES_MIRRORED(FRm, c);
113 case TRANS_FDm:
114 return TRANS_EDGES_MIRRORED(FDm, c);
115 case TRANS_FLm:
116 return TRANS_EDGES_MIRRORED(FLm, c);
117 case TRANS_BUm:
118 return TRANS_EDGES_MIRRORED(BUm, c);
119 case TRANS_BRm:
120 return TRANS_EDGES_MIRRORED(BRm, c);
121 case TRANS_BDm:
122 return TRANS_EDGES_MIRRORED(BDm, c);
123 case TRANS_BLm:
124 return TRANS_EDGES_MIRRORED(BLm, c);
125 default:
126 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
127 return ZERO_CUBE;
128 }
124} 129}
125 130
126STATIC cube_t 131STATIC cube_t
127transform_corners(cube_t c, uint8_t t) 132transform_corners(cube_t c, uint8_t t)
128{ 133{
129 cube_t ret, trans_cube, trans_inv; 134 switch (t) {
130 135 case TRANS_UFr:
131 DBG_ASSERT(t < 48, ZERO_CUBE, 136 return c;
132 "transform: invalid transformation %" PRIu8 137 case TRANS_ULr:
133 ", must be between 0 and 47\n", t); 138 return TRANS_CORNERS_ROTATION(ULr, c);
134 139 case TRANS_UBr:
135 trans_cube = cubefromarray_single(cube_trans_table[t]); 140 return TRANS_CORNERS_ROTATION(UBr, c);
136 trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); 141 case TRANS_URr:
137 142 return TRANS_CORNERS_ROTATION(URr, c);
138 ret = compose_corners(trans_cube, c); 143 case TRANS_DFr:
139 ret = compose_corners(ret, trans_inv); 144 return TRANS_CORNERS_ROTATION(DFr, c);
140 145 case TRANS_DLr:
141 return t < 24 ? ret : invertco(ret); 146 return TRANS_CORNERS_ROTATION(DLr, c);
147 case TRANS_DBr:
148 return TRANS_CORNERS_ROTATION(DBr, c);
149 case TRANS_DRr:
150 return TRANS_CORNERS_ROTATION(DRr, c);
151 case TRANS_RUr:
152 return TRANS_CORNERS_ROTATION(RUr, c);
153 case TRANS_RFr:
154 return TRANS_CORNERS_ROTATION(RFr, c);
155 case TRANS_RDr:
156 return TRANS_CORNERS_ROTATION(RDr, c);
157 case TRANS_RBr:
158 return TRANS_CORNERS_ROTATION(RBr, c);
159 case TRANS_LUr:
160 return TRANS_CORNERS_ROTATION(LUr, c);
161 case TRANS_LFr:
162 return TRANS_CORNERS_ROTATION(LFr, c);
163 case TRANS_LDr:
164 return TRANS_CORNERS_ROTATION(LDr, c);
165 case TRANS_LBr:
166 return TRANS_CORNERS_ROTATION(LBr, c);
167 case TRANS_FUr:
168 return TRANS_CORNERS_ROTATION(FUr, c);
169 case TRANS_FRr:
170 return TRANS_CORNERS_ROTATION(FRr, c);
171 case TRANS_FDr:
172 return TRANS_CORNERS_ROTATION(FDr, c);
173 case TRANS_FLr:
174 return TRANS_CORNERS_ROTATION(FLr, c);
175 case TRANS_BUr:
176 return TRANS_CORNERS_ROTATION(BUr, c);
177 case TRANS_BRr:
178 return TRANS_CORNERS_ROTATION(BRr, c);
179 case TRANS_BDr:
180 return TRANS_CORNERS_ROTATION(BDr, c);
181 case TRANS_BLr:
182 return TRANS_CORNERS_ROTATION(BLr, c);
183 case TRANS_UFm:
184 return TRANS_CORNERS_MIRRORED(UFm, c);
185 case TRANS_ULm:
186 return TRANS_CORNERS_MIRRORED(ULm, c);
187 case TRANS_UBm:
188 return TRANS_CORNERS_MIRRORED(UBm, c);
189 case TRANS_URm:
190 return TRANS_CORNERS_MIRRORED(URm, c);
191 case TRANS_DFm:
192 return TRANS_CORNERS_MIRRORED(DFm, c);
193 case TRANS_DLm:
194 return TRANS_CORNERS_MIRRORED(DLm, c);
195 case TRANS_DBm:
196 return TRANS_CORNERS_MIRRORED(DBm, c);
197 case TRANS_DRm:
198 return TRANS_CORNERS_MIRRORED(DRm, c);
199 case TRANS_RUm:
200 return TRANS_CORNERS_MIRRORED(RUm, c);
201 case TRANS_RFm:
202 return TRANS_CORNERS_MIRRORED(RFm, c);
203 case TRANS_RDm:
204 return TRANS_CORNERS_MIRRORED(RDm, c);
205 case TRANS_RBm:
206 return TRANS_CORNERS_MIRRORED(RBm, c);
207 case TRANS_LUm:
208 return TRANS_CORNERS_MIRRORED(LUm, c);
209 case TRANS_LFm:
210 return TRANS_CORNERS_MIRRORED(LFm, c);
211 case TRANS_LDm:
212 return TRANS_CORNERS_MIRRORED(LDm, c);
213 case TRANS_LBm:
214 return TRANS_CORNERS_MIRRORED(LBm, c);
215 case TRANS_FUm:
216 return TRANS_CORNERS_MIRRORED(FUm, c);
217 case TRANS_FRm:
218 return TRANS_CORNERS_MIRRORED(FRm, c);
219 case TRANS_FDm:
220 return TRANS_CORNERS_MIRRORED(FDm, c);
221 case TRANS_FLm:
222 return TRANS_CORNERS_MIRRORED(FLm, c);
223 case TRANS_BUm:
224 return TRANS_CORNERS_MIRRORED(BUm, c);
225 case TRANS_BRm:
226 return TRANS_CORNERS_MIRRORED(BRm, c);
227 case TRANS_BDm:
228 return TRANS_CORNERS_MIRRORED(BDm, c);
229 case TRANS_BLm:
230 return TRANS_CORNERS_MIRRORED(BLm, c);
231 default:
232 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
233 return ZERO_CUBE;
234 }
142} 235}
143 236
144STATIC cube_t 237STATIC cube_t
145transform(cube_t c, uint8_t t) 238transform(cube_t c, uint8_t t)
146{ 239{
147 cube_t ret, trans_cube, trans_inv; 240 switch (t) {
148 241 case TRANS_UFr:
149 DBG_ASSERT(t < 48, ZERO_CUBE, 242 return c;
150 "transform: invalid transformation %" PRIu8 243 case TRANS_ULr:
151 ", must be between 0 and 47\n", t); 244 return TRANS_ROTATION(ULr, c);
152 245 case TRANS_UBr:
153 trans_cube = cubefromarray_single(cube_trans_table[t]); 246 return TRANS_ROTATION(UBr, c);
154 trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); 247 case TRANS_URr:
155 248 return TRANS_ROTATION(URr, c);
156 ret = compose(trans_cube, c); 249 case TRANS_DFr:
157 ret = compose(ret, trans_inv); 250 return TRANS_ROTATION(DFr, c);
158 251 case TRANS_DLr:
159 return t < 24 ? ret : invertco(ret); 252 return TRANS_ROTATION(DLr, c);
253 case TRANS_DBr:
254 return TRANS_ROTATION(DBr, c);
255 case TRANS_DRr:
256 return TRANS_ROTATION(DRr, c);
257 case TRANS_RUr:
258 return TRANS_ROTATION(RUr, c);
259 case TRANS_RFr:
260 return TRANS_ROTATION(RFr, c);
261 case TRANS_RDr:
262 return TRANS_ROTATION(RDr, c);
263 case TRANS_RBr:
264 return TRANS_ROTATION(RBr, c);
265 case TRANS_LUr:
266 return TRANS_ROTATION(LUr, c);
267 case TRANS_LFr:
268 return TRANS_ROTATION(LFr, c);
269 case TRANS_LDr:
270 return TRANS_ROTATION(LDr, c);
271 case TRANS_LBr:
272 return TRANS_ROTATION(LBr, c);
273 case TRANS_FUr:
274 return TRANS_ROTATION(FUr, c);
275 case TRANS_FRr:
276 return TRANS_ROTATION(FRr, c);
277 case TRANS_FDr:
278 return TRANS_ROTATION(FDr, c);
279 case TRANS_FLr:
280 return TRANS_ROTATION(FLr, c);
281 case TRANS_BUr:
282 return TRANS_ROTATION(BUr, c);
283 case TRANS_BRr:
284 return TRANS_ROTATION(BRr, c);
285 case TRANS_BDr:
286 return TRANS_ROTATION(BDr, c);
287 case TRANS_BLr:
288 return TRANS_ROTATION(BLr, c);
289 case TRANS_UFm:
290 return TRANS_MIRRORED(UFm, c);
291 case TRANS_ULm:
292 return TRANS_MIRRORED(ULm, c);
293 case TRANS_UBm:
294 return TRANS_MIRRORED(UBm, c);
295 case TRANS_URm:
296 return TRANS_MIRRORED(URm, c);
297 case TRANS_DFm:
298 return TRANS_MIRRORED(DFm, c);
299 case TRANS_DLm:
300 return TRANS_MIRRORED(DLm, c);
301 case TRANS_DBm:
302 return TRANS_MIRRORED(DBm, c);
303 case TRANS_DRm:
304 return TRANS_MIRRORED(DRm, c);
305 case TRANS_RUm:
306 return TRANS_MIRRORED(RUm, c);
307 case TRANS_RFm:
308 return TRANS_MIRRORED(RFm, c);
309 case TRANS_RDm:
310 return TRANS_MIRRORED(RDm, c);
311 case TRANS_RBm:
312 return TRANS_MIRRORED(RBm, c);
313 case TRANS_LUm:
314 return TRANS_MIRRORED(LUm, c);
315 case TRANS_LFm:
316 return TRANS_MIRRORED(LFm, c);
317 case TRANS_LDm:
318 return TRANS_MIRRORED(LDm, c);
319 case TRANS_LBm:
320 return TRANS_MIRRORED(LBm, c);
321 case TRANS_FUm:
322 return TRANS_MIRRORED(FUm, c);
323 case TRANS_FRm:
324 return TRANS_MIRRORED(FRm, c);
325 case TRANS_FDm:
326 return TRANS_MIRRORED(FDm, c);
327 case TRANS_FLm:
328 return TRANS_MIRRORED(FLm, c);
329 case TRANS_BUm:
330 return TRANS_MIRRORED(BUm, c);
331 case TRANS_BRm:
332 return TRANS_MIRRORED(BRm, c);
333 case TRANS_BDm:
334 return TRANS_MIRRORED(BDm, c);
335 case TRANS_BLm:
336 return TRANS_MIRRORED(BLm, c);
337 default:
338 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
339 return ZERO_CUBE;
340 }
160} 341}
161 342
162STATIC cube_t 343STATIC cube_t
diff --git a/src/core/transform_with_switch.h b/src/core/transform_with_switch.h
deleted file mode 100644
index 83204d5..0000000
--- a/src/core/transform_with_switch.h
+++ /dev/null
@@ -1,354 +0,0 @@
1#define TRANS_EDGES_ROTATION(T, c) \
2 compose_edges(compose_edges(TRANS_CUBE_ ## T, c), \
3 TRANS_CUBE_ ## T ## _INVERSE)
4#define TRANS_EDGES_MIRRORED(T, c) TRANS_EDGES_ROTATION(T, c)
5
6#define TRANS_CORNERS_ROTATION(T, c) \
7 compose_corners(compose_corners(TRANS_CUBE_ ## T, c), \
8 TRANS_CUBE_ ## T ## _INVERSE)
9#define TRANS_CORNERS_MIRRORED(T, c) \
10 invertco(compose_corners( \
11 compose_corners(TRANS_CUBE_ ## T, c), TRANS_CUBE_ ## T ## _INVERSE))
12
13#define TRANS_ROTATION(T, c) \
14 compose(compose(TRANS_CUBE_ ## T, c), \
15 TRANS_CUBE_ ## T ## _INVERSE)
16#define TRANS_MIRRORED(T, c) \
17 invertco(compose(compose(TRANS_CUBE_ ## T, c), \
18 TRANS_CUBE_ ## T ## _INVERSE))
19
20STATIC cube_t transform_edges(cube_t, uint8_t);
21STATIC cube_t transform_corners(cube_t, uint8_t);
22STATIC cube_t transform(cube_t, uint8_t);
23STATIC cube_t applytrans(cube_t, const char *);
24
25STATIC cube_t
26transform_edges(cube_t c, uint8_t t)
27{
28 switch (t) {
29 case TRANS_UFr:
30 return c;
31 case TRANS_ULr:
32 return TRANS_EDGES_ROTATION(ULr, c);
33 case TRANS_UBr:
34 return TRANS_EDGES_ROTATION(UBr, c);
35 case TRANS_URr:
36 return TRANS_EDGES_ROTATION(URr, c);
37 case TRANS_DFr:
38 return TRANS_EDGES_ROTATION(DFr, c);
39 case TRANS_DLr:
40 return TRANS_EDGES_ROTATION(DLr, c);
41 case TRANS_DBr:
42 return TRANS_EDGES_ROTATION(DBr, c);
43 case TRANS_DRr:
44 return TRANS_EDGES_ROTATION(DRr, c);
45 case TRANS_RUr:
46 return TRANS_EDGES_ROTATION(RUr, c);
47 case TRANS_RFr:
48 return TRANS_EDGES_ROTATION(RFr, c);
49 case TRANS_RDr:
50 return TRANS_EDGES_ROTATION(RDr, c);
51 case TRANS_RBr:
52 return TRANS_EDGES_ROTATION(RBr, c);
53 case TRANS_LUr:
54 return TRANS_EDGES_ROTATION(LUr, c);
55 case TRANS_LFr:
56 return TRANS_EDGES_ROTATION(LFr, c);
57 case TRANS_LDr:
58 return TRANS_EDGES_ROTATION(LDr, c);
59 case TRANS_LBr:
60 return TRANS_EDGES_ROTATION(LBr, c);
61 case TRANS_FUr:
62 return TRANS_EDGES_ROTATION(FUr, c);
63 case TRANS_FRr:
64 return TRANS_EDGES_ROTATION(FRr, c);
65 case TRANS_FDr:
66 return TRANS_EDGES_ROTATION(FDr, c);
67 case TRANS_FLr:
68 return TRANS_EDGES_ROTATION(FLr, c);
69 case TRANS_BUr:
70 return TRANS_EDGES_ROTATION(BUr, c);
71 case TRANS_BRr:
72 return TRANS_EDGES_ROTATION(BRr, c);
73 case TRANS_BDr:
74 return TRANS_EDGES_ROTATION(BDr, c);
75 case TRANS_BLr:
76 return TRANS_EDGES_ROTATION(BLr, c);
77 case TRANS_UFm:
78 return TRANS_EDGES_MIRRORED(UFm, c);
79 case TRANS_ULm:
80 return TRANS_EDGES_MIRRORED(ULm, c);
81 case TRANS_UBm:
82 return TRANS_EDGES_MIRRORED(UBm, c);
83 case TRANS_URm:
84 return TRANS_EDGES_MIRRORED(URm, c);
85 case TRANS_DFm:
86 return TRANS_EDGES_MIRRORED(DFm, c);
87 case TRANS_DLm:
88 return TRANS_EDGES_MIRRORED(DLm, c);
89 case TRANS_DBm:
90 return TRANS_EDGES_MIRRORED(DBm, c);
91 case TRANS_DRm:
92 return TRANS_EDGES_MIRRORED(DRm, c);
93 case TRANS_RUm:
94 return TRANS_EDGES_MIRRORED(RUm, c);
95 case TRANS_RFm:
96 return TRANS_EDGES_MIRRORED(RFm, c);
97 case TRANS_RDm:
98 return TRANS_EDGES_MIRRORED(RDm, c);
99 case TRANS_RBm:
100 return TRANS_EDGES_MIRRORED(RBm, c);
101 case TRANS_LUm:
102 return TRANS_EDGES_MIRRORED(LUm, c);
103 case TRANS_LFm:
104 return TRANS_EDGES_MIRRORED(LFm, c);
105 case TRANS_LDm:
106 return TRANS_EDGES_MIRRORED(LDm, c);
107 case TRANS_LBm:
108 return TRANS_EDGES_MIRRORED(LBm, c);
109 case TRANS_FUm:
110 return TRANS_EDGES_MIRRORED(FUm, c);
111 case TRANS_FRm:
112 return TRANS_EDGES_MIRRORED(FRm, c);
113 case TRANS_FDm:
114 return TRANS_EDGES_MIRRORED(FDm, c);
115 case TRANS_FLm:
116 return TRANS_EDGES_MIRRORED(FLm, c);
117 case TRANS_BUm:
118 return TRANS_EDGES_MIRRORED(BUm, c);
119 case TRANS_BRm:
120 return TRANS_EDGES_MIRRORED(BRm, c);
121 case TRANS_BDm:
122 return TRANS_EDGES_MIRRORED(BDm, c);
123 case TRANS_BLm:
124 return TRANS_EDGES_MIRRORED(BLm, c);
125 default:
126 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
127 return ZERO_CUBE;
128 }
129}
130
131STATIC cube_t
132transform_corners(cube_t c, uint8_t t)
133{
134 switch (t) {
135 case TRANS_UFr:
136 return c;
137 case TRANS_ULr:
138 return TRANS_CORNERS_ROTATION(ULr, c);
139 case TRANS_UBr:
140 return TRANS_CORNERS_ROTATION(UBr, c);
141 case TRANS_URr:
142 return TRANS_CORNERS_ROTATION(URr, c);
143 case TRANS_DFr:
144 return TRANS_CORNERS_ROTATION(DFr, c);
145 case TRANS_DLr:
146 return TRANS_CORNERS_ROTATION(DLr, c);
147 case TRANS_DBr:
148 return TRANS_CORNERS_ROTATION(DBr, c);
149 case TRANS_DRr:
150 return TRANS_CORNERS_ROTATION(DRr, c);
151 case TRANS_RUr:
152 return TRANS_CORNERS_ROTATION(RUr, c);
153 case TRANS_RFr:
154 return TRANS_CORNERS_ROTATION(RFr, c);
155 case TRANS_RDr:
156 return TRANS_CORNERS_ROTATION(RDr, c);
157 case TRANS_RBr:
158 return TRANS_CORNERS_ROTATION(RBr, c);
159 case TRANS_LUr:
160 return TRANS_CORNERS_ROTATION(LUr, c);
161 case TRANS_LFr:
162 return TRANS_CORNERS_ROTATION(LFr, c);
163 case TRANS_LDr:
164 return TRANS_CORNERS_ROTATION(LDr, c);
165 case TRANS_LBr:
166 return TRANS_CORNERS_ROTATION(LBr, c);
167 case TRANS_FUr:
168 return TRANS_CORNERS_ROTATION(FUr, c);
169 case TRANS_FRr:
170 return TRANS_CORNERS_ROTATION(FRr, c);
171 case TRANS_FDr:
172 return TRANS_CORNERS_ROTATION(FDr, c);
173 case TRANS_FLr:
174 return TRANS_CORNERS_ROTATION(FLr, c);
175 case TRANS_BUr:
176 return TRANS_CORNERS_ROTATION(BUr, c);
177 case TRANS_BRr:
178 return TRANS_CORNERS_ROTATION(BRr, c);
179 case TRANS_BDr:
180 return TRANS_CORNERS_ROTATION(BDr, c);
181 case TRANS_BLr:
182 return TRANS_CORNERS_ROTATION(BLr, c);
183 case TRANS_UFm:
184 return TRANS_CORNERS_MIRRORED(UFm, c);
185 case TRANS_ULm:
186 return TRANS_CORNERS_MIRRORED(ULm, c);
187 case TRANS_UBm:
188 return TRANS_CORNERS_MIRRORED(UBm, c);
189 case TRANS_URm:
190 return TRANS_CORNERS_MIRRORED(URm, c);
191 case TRANS_DFm:
192 return TRANS_CORNERS_MIRRORED(DFm, c);
193 case TRANS_DLm:
194 return TRANS_CORNERS_MIRRORED(DLm, c);
195 case TRANS_DBm:
196 return TRANS_CORNERS_MIRRORED(DBm, c);
197 case TRANS_DRm:
198 return TRANS_CORNERS_MIRRORED(DRm, c);
199 case TRANS_RUm:
200 return TRANS_CORNERS_MIRRORED(RUm, c);
201 case TRANS_RFm:
202 return TRANS_CORNERS_MIRRORED(RFm, c);
203 case TRANS_RDm:
204 return TRANS_CORNERS_MIRRORED(RDm, c);
205 case TRANS_RBm:
206 return TRANS_CORNERS_MIRRORED(RBm, c);
207 case TRANS_LUm:
208 return TRANS_CORNERS_MIRRORED(LUm, c);
209 case TRANS_LFm:
210 return TRANS_CORNERS_MIRRORED(LFm, c);
211 case TRANS_LDm:
212 return TRANS_CORNERS_MIRRORED(LDm, c);
213 case TRANS_LBm:
214 return TRANS_CORNERS_MIRRORED(LBm, c);
215 case TRANS_FUm:
216 return TRANS_CORNERS_MIRRORED(FUm, c);
217 case TRANS_FRm:
218 return TRANS_CORNERS_MIRRORED(FRm, c);
219 case TRANS_FDm:
220 return TRANS_CORNERS_MIRRORED(FDm, c);
221 case TRANS_FLm:
222 return TRANS_CORNERS_MIRRORED(FLm, c);
223 case TRANS_BUm:
224 return TRANS_CORNERS_MIRRORED(BUm, c);
225 case TRANS_BRm:
226 return TRANS_CORNERS_MIRRORED(BRm, c);
227 case TRANS_BDm:
228 return TRANS_CORNERS_MIRRORED(BDm, c);
229 case TRANS_BLm:
230 return TRANS_CORNERS_MIRRORED(BLm, c);
231 default:
232 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
233 return ZERO_CUBE;
234 }
235}
236
237STATIC cube_t
238transform(cube_t c, uint8_t t)
239{
240 switch (t) {
241 case TRANS_UFr:
242 return c;
243 case TRANS_ULr:
244 return TRANS_ROTATION(ULr, c);
245 case TRANS_UBr:
246 return TRANS_ROTATION(UBr, c);
247 case TRANS_URr:
248 return TRANS_ROTATION(URr, c);
249 case TRANS_DFr:
250 return TRANS_ROTATION(DFr, c);
251 case TRANS_DLr:
252 return TRANS_ROTATION(DLr, c);
253 case TRANS_DBr:
254 return TRANS_ROTATION(DBr, c);
255 case TRANS_DRr:
256 return TRANS_ROTATION(DRr, c);
257 case TRANS_RUr:
258 return TRANS_ROTATION(RUr, c);
259 case TRANS_RFr:
260 return TRANS_ROTATION(RFr, c);
261 case TRANS_RDr:
262 return TRANS_ROTATION(RDr, c);
263 case TRANS_RBr:
264 return TRANS_ROTATION(RBr, c);
265 case TRANS_LUr:
266 return TRANS_ROTATION(LUr, c);
267 case TRANS_LFr:
268 return TRANS_ROTATION(LFr, c);
269 case TRANS_LDr:
270 return TRANS_ROTATION(LDr, c);
271 case TRANS_LBr:
272 return TRANS_ROTATION(LBr, c);
273 case TRANS_FUr:
274 return TRANS_ROTATION(FUr, c);
275 case TRANS_FRr:
276 return TRANS_ROTATION(FRr, c);
277 case TRANS_FDr:
278 return TRANS_ROTATION(FDr, c);
279 case TRANS_FLr:
280 return TRANS_ROTATION(FLr, c);
281 case TRANS_BUr:
282 return TRANS_ROTATION(BUr, c);
283 case TRANS_BRr:
284 return TRANS_ROTATION(BRr, c);
285 case TRANS_BDr:
286 return TRANS_ROTATION(BDr, c);
287 case TRANS_BLr:
288 return TRANS_ROTATION(BLr, c);
289 case TRANS_UFm:
290 return TRANS_MIRRORED(UFm, c);
291 case TRANS_ULm:
292 return TRANS_MIRRORED(ULm, c);
293 case TRANS_UBm:
294 return TRANS_MIRRORED(UBm, c);
295 case TRANS_URm:
296 return TRANS_MIRRORED(URm, c);
297 case TRANS_DFm:
298 return TRANS_MIRRORED(DFm, c);
299 case TRANS_DLm:
300 return TRANS_MIRRORED(DLm, c);
301 case TRANS_DBm:
302 return TRANS_MIRRORED(DBm, c);
303 case TRANS_DRm:
304 return TRANS_MIRRORED(DRm, c);
305 case TRANS_RUm:
306 return TRANS_MIRRORED(RUm, c);
307 case TRANS_RFm:
308 return TRANS_MIRRORED(RFm, c);
309 case TRANS_RDm:
310 return TRANS_MIRRORED(RDm, c);
311 case TRANS_RBm:
312 return TRANS_MIRRORED(RBm, c);
313 case TRANS_LUm:
314 return TRANS_MIRRORED(LUm, c);
315 case TRANS_LFm:
316 return TRANS_MIRRORED(LFm, c);
317 case TRANS_LDm:
318 return TRANS_MIRRORED(LDm, c);
319 case TRANS_LBm:
320 return TRANS_MIRRORED(LBm, c);
321 case TRANS_FUm:
322 return TRANS_MIRRORED(FUm, c);
323 case TRANS_FRm:
324 return TRANS_MIRRORED(FRm, c);
325 case TRANS_FDm:
326 return TRANS_MIRRORED(FDm, c);
327 case TRANS_FLm:
328 return TRANS_MIRRORED(FLm, c);
329 case TRANS_BUm:
330 return TRANS_MIRRORED(BUm, c);
331 case TRANS_BRm:
332 return TRANS_MIRRORED(BRm, c);
333 case TRANS_BDm:
334 return TRANS_MIRRORED(BDm, c);
335 case TRANS_BLm:
336 return TRANS_MIRRORED(BLm, c);
337 default:
338 LOG("transform error, unknown transformation %" PRIu8 "\n", t);
339 return ZERO_CUBE;
340 }
341}
342
343STATIC cube_t
344applytrans(cube_t cube, const char *buf)
345{
346 uint8_t t;
347
348 DBG_ASSERT(isconsistent(cube), ZERO_CUBE,
349 "transformation error: inconsistent cube\n");
350
351 t = readtrans(buf);
352
353 return transform(cube, t);
354}

Generated with cgit - Back to sebastiano.tronto.net