aboutsummaryrefslogtreecommitdiff
path: root/src/core/transform.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/core/transform.h229
1 files changed, 104 insertions, 125 deletions
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;

Generated with cgit - Back to sebastiano.tronto.net