diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-04 12:01:41 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2024-10-04 12:01:41 +0200 |
| commit | 80b065f757240af7920862b3e09f32a6dc06d392 (patch) | |
| tree | c0223ba1f0a3254305f59637b3fb25bd58698cf8 /src/core/transform.h | |
| parent | fd111a1a51b8293f79db6284331af50824df92b9 (diff) | |
| download | nissy-core-80b065f757240af7920862b3e09f32a6dc06d392.tar.gz nissy-core-80b065f757240af7920862b3e09f32a6dc06d392.zip | |
Table-based transformations (will revert immediately)
This commit changes transformations to being based on a lookup
table intead of a big switch. This is something I had planned for a long
time and the code is nicer with this change. But unfortunately the performance
is noticeably worse, so I'll revert all these changes in the next commit.
I wanted to push this anyway so we can keep track of this.
Diffstat (limited to 'src/core/transform.h')
| -rw-r--r-- | src/core/transform.h | 208 |
1 files changed, 104 insertions, 104 deletions
diff --git a/src/core/transform.h b/src/core/transform.h index 37de46b..f72e2af 100644 --- a/src/core/transform.h +++ b/src/core/transform.h | |||
| @@ -3,106 +3,106 @@ STATIC cube_t transform_corners(cube_t, uint8_t); | |||
| 3 | STATIC cube_t transform(cube_t, uint8_t); | 3 | STATIC cube_t transform(cube_t, uint8_t); |
| 4 | STATIC cube_t applytrans(cube_t, const char *); | 4 | STATIC cube_t applytrans(cube_t, const char *); |
| 5 | 5 | ||
| 6 | static cube_t cube_trans_table[48] = { | 6 | static uint8_t cube_trans_table[48][20] = { |
| 7 | [TRANS_UFr] = TRANS_CUBE_UFr, | 7 | [TRANS_UFr] = { TRANS_CUBE_UFr }, |
| 8 | [TRANS_UFm] = TRANS_CUBE_UFm, | 8 | [TRANS_UFm] = { TRANS_CUBE_UFm }, |
| 9 | [TRANS_ULr] = TRANS_CUBE_URr, | 9 | [TRANS_ULr] = { TRANS_CUBE_ULr }, |
| 10 | [TRANS_ULm] = TRANS_CUBE_ULm, | 10 | [TRANS_ULm] = { TRANS_CUBE_ULm }, |
| 11 | [TRANS_UBr] = TRANS_CUBE_UBr, | 11 | [TRANS_UBr] = { TRANS_CUBE_UBr }, |
| 12 | [TRANS_UBm] = TRANS_CUBE_UBm, | 12 | [TRANS_UBm] = { TRANS_CUBE_UBm }, |
| 13 | [TRANS_URr] = TRANS_CUBE_ULr, | 13 | [TRANS_URr] = { TRANS_CUBE_URr }, |
| 14 | [TRANS_URm] = TRANS_CUBE_URm, | 14 | [TRANS_URm] = { TRANS_CUBE_URm }, |
| 15 | [TRANS_DFr] = TRANS_CUBE_DFr, | 15 | [TRANS_DFr] = { TRANS_CUBE_DFr }, |
| 16 | [TRANS_DFm] = TRANS_CUBE_DFm, | 16 | [TRANS_DFm] = { TRANS_CUBE_DFm }, |
| 17 | [TRANS_DLr] = TRANS_CUBE_DLr, | 17 | [TRANS_DLr] = { TRANS_CUBE_DLr }, |
| 18 | [TRANS_DLm] = TRANS_CUBE_DRm, | 18 | [TRANS_DLm] = { TRANS_CUBE_DLm }, |
| 19 | [TRANS_DBr] = TRANS_CUBE_DBr, | 19 | [TRANS_DBr] = { TRANS_CUBE_DBr }, |
| 20 | [TRANS_DBm] = TRANS_CUBE_DBm, | 20 | [TRANS_DBm] = { TRANS_CUBE_DBm }, |
| 21 | [TRANS_DRr] = TRANS_CUBE_DRr, | 21 | [TRANS_DRr] = { TRANS_CUBE_DRr }, |
| 22 | [TRANS_DRm] = TRANS_CUBE_DLm, | 22 | [TRANS_DRm] = { TRANS_CUBE_DRm }, |
| 23 | [TRANS_RUr] = TRANS_CUBE_FRr, | 23 | [TRANS_RUr] = { TRANS_CUBE_RUr }, |
| 24 | [TRANS_RUm] = TRANS_CUBE_FLm, | 24 | [TRANS_RUm] = { TRANS_CUBE_RUm }, |
| 25 | [TRANS_RFr] = TRANS_CUBE_LFr, | 25 | [TRANS_RFr] = { TRANS_CUBE_RFr }, |
| 26 | [TRANS_RFm] = TRANS_CUBE_RFm, | 26 | [TRANS_RFm] = { TRANS_CUBE_RFm }, |
| 27 | [TRANS_RDr] = TRANS_CUBE_BLr, | 27 | [TRANS_RDr] = { TRANS_CUBE_RDr }, |
| 28 | [TRANS_RDm] = TRANS_CUBE_BRm, | 28 | [TRANS_RDm] = { TRANS_CUBE_RDm }, |
| 29 | [TRANS_RBr] = TRANS_CUBE_RBr, | 29 | [TRANS_RBr] = { TRANS_CUBE_RBr }, |
| 30 | [TRANS_RBm] = TRANS_CUBE_LBm, | 30 | [TRANS_RBm] = { TRANS_CUBE_RBm }, |
| 31 | [TRANS_LUr] = TRANS_CUBE_FLr, | 31 | [TRANS_LUr] = { TRANS_CUBE_LUr }, |
| 32 | [TRANS_LUm] = TRANS_CUBE_FRm, | 32 | [TRANS_LUm] = { TRANS_CUBE_LUm }, |
| 33 | [TRANS_LFr] = TRANS_CUBE_RFr, | 33 | [TRANS_LFr] = { TRANS_CUBE_LFr }, |
| 34 | [TRANS_LFm] = TRANS_CUBE_LFm, | 34 | [TRANS_LFm] = { TRANS_CUBE_LFm }, |
| 35 | [TRANS_LDr] = TRANS_CUBE_BRr, | 35 | [TRANS_LDr] = { TRANS_CUBE_LDr }, |
| 36 | [TRANS_LDm] = TRANS_CUBE_BLm, | 36 | [TRANS_LDm] = { TRANS_CUBE_LDm }, |
| 37 | [TRANS_LBr] = TRANS_CUBE_LBr, | 37 | [TRANS_LBr] = { TRANS_CUBE_LBr }, |
| 38 | [TRANS_LBm] = TRANS_CUBE_RBm, | 38 | [TRANS_LBm] = { TRANS_CUBE_LBm }, |
| 39 | [TRANS_FUr] = TRANS_CUBE_FUr, | 39 | [TRANS_FUr] = { TRANS_CUBE_FUr }, |
| 40 | [TRANS_FUm] = TRANS_CUBE_FUm, | 40 | [TRANS_FUm] = { TRANS_CUBE_FUm }, |
| 41 | [TRANS_FRr] = TRANS_CUBE_RUr, | 41 | [TRANS_FRr] = { TRANS_CUBE_FRr }, |
| 42 | [TRANS_FRm] = TRANS_CUBE_LUm, | 42 | [TRANS_FRm] = { TRANS_CUBE_FRm }, |
| 43 | [TRANS_FDr] = TRANS_CUBE_BUr, | 43 | [TRANS_FDr] = { TRANS_CUBE_FDr }, |
| 44 | [TRANS_FDm] = TRANS_CUBE_BUm, | 44 | [TRANS_FDm] = { TRANS_CUBE_FDm }, |
| 45 | [TRANS_FLr] = TRANS_CUBE_LUr, | 45 | [TRANS_FLr] = { TRANS_CUBE_FLr }, |
| 46 | [TRANS_FLm] = TRANS_CUBE_RUm, | 46 | [TRANS_FLm] = { TRANS_CUBE_FLm }, |
| 47 | [TRANS_BUr] = TRANS_CUBE_FDr, | 47 | [TRANS_BUr] = { TRANS_CUBE_BUr }, |
| 48 | [TRANS_BUm] = TRANS_CUBE_FDm, | 48 | [TRANS_BUm] = { TRANS_CUBE_BUm }, |
| 49 | [TRANS_BRr] = TRANS_CUBE_LDr, | 49 | [TRANS_BRr] = { TRANS_CUBE_BRr }, |
| 50 | [TRANS_BRm] = TRANS_CUBE_RDm, | 50 | [TRANS_BRm] = { TRANS_CUBE_BRm }, |
| 51 | [TRANS_BDr] = TRANS_CUBE_BDr, | 51 | [TRANS_BDr] = { TRANS_CUBE_BDr }, |
| 52 | [TRANS_BDm] = TRANS_CUBE_BDm, | 52 | [TRANS_BDm] = { TRANS_CUBE_BDm }, |
| 53 | [TRANS_BLr] = TRANS_CUBE_RDr, | 53 | [TRANS_BLr] = { TRANS_CUBE_BLr }, |
| 54 | [TRANS_BLm] = TRANS_CUBE_LDm, | 54 | [TRANS_BLm] = { TRANS_CUBE_BLm }, |
| 55 | }; | 55 | }; |
| 56 | 56 | ||
| 57 | static cube_t cube_trans_table_inverse[48] = { | 57 | static uint8_t cube_trans_table_inverse[48][20] = { |
| 58 | [TRANS_UFr] = TRANS_CUBE_UFr_inverse, | 58 | [TRANS_UFr] = { TRANS_CUBE_UFr_INVERSE }, |
| 59 | [TRANS_UFm] = TRANS_CUBE_UFm_inverse, | 59 | [TRANS_UFm] = { TRANS_CUBE_UFm_INVERSE }, |
| 60 | [TRANS_ULr] = TRANS_CUBE_URr_inverse, | 60 | [TRANS_ULr] = { TRANS_CUBE_ULr_INVERSE }, |
| 61 | [TRANS_ULm] = TRANS_CUBE_ULm_inverse, | 61 | [TRANS_ULm] = { TRANS_CUBE_ULm_INVERSE }, |
| 62 | [TRANS_UBr] = TRANS_CUBE_UBr_inverse, | 62 | [TRANS_UBr] = { TRANS_CUBE_UBr_INVERSE }, |
| 63 | [TRANS_UBm] = TRANS_CUBE_UBm_inverse, | 63 | [TRANS_UBm] = { TRANS_CUBE_UBm_INVERSE }, |
| 64 | [TRANS_URr] = TRANS_CUBE_ULr_inverse, | 64 | [TRANS_URr] = { TRANS_CUBE_URr_INVERSE }, |
| 65 | [TRANS_URm] = TRANS_CUBE_URm_inverse, | 65 | [TRANS_URm] = { TRANS_CUBE_URm_INVERSE }, |
| 66 | [TRANS_DFr] = TRANS_CUBE_DFr_inverse, | 66 | [TRANS_DFr] = { TRANS_CUBE_DFr_INVERSE }, |
| 67 | [TRANS_DFm] = TRANS_CUBE_DFm_inverse, | 67 | [TRANS_DFm] = { TRANS_CUBE_DFm_INVERSE }, |
| 68 | [TRANS_DLr] = TRANS_CUBE_DLr_inverse, | 68 | [TRANS_DLr] = { TRANS_CUBE_DLr_INVERSE }, |
| 69 | [TRANS_DLm] = TRANS_CUBE_DRm_inverse, | 69 | [TRANS_DLm] = { TRANS_CUBE_DLm_INVERSE }, |
| 70 | [TRANS_DBr] = TRANS_CUBE_DBr_inverse, | 70 | [TRANS_DBr] = { TRANS_CUBE_DBr_INVERSE }, |
| 71 | [TRANS_DBm] = TRANS_CUBE_DBm_inverse, | 71 | [TRANS_DBm] = { TRANS_CUBE_DBm_INVERSE }, |
| 72 | [TRANS_DRr] = TRANS_CUBE_DRr_inverse, | 72 | [TRANS_DRr] = { TRANS_CUBE_DRr_INVERSE }, |
| 73 | [TRANS_DRm] = TRANS_CUBE_DLm_inverse, | 73 | [TRANS_DRm] = { TRANS_CUBE_DRm_INVERSE }, |
| 74 | [TRANS_RUr] = TRANS_CUBE_FRr_inverse, | 74 | [TRANS_RUr] = { TRANS_CUBE_RUr_INVERSE }, |
| 75 | [TRANS_RUm] = TRANS_CUBE_FLm_inverse, | 75 | [TRANS_RUm] = { TRANS_CUBE_RUm_INVERSE }, |
| 76 | [TRANS_RFr] = TRANS_CUBE_LFr_inverse, | 76 | [TRANS_RFr] = { TRANS_CUBE_RFr_INVERSE }, |
| 77 | [TRANS_RFm] = TRANS_CUBE_RFm_inverse, | 77 | [TRANS_RFm] = { TRANS_CUBE_RFm_INVERSE }, |
| 78 | [TRANS_RDr] = TRANS_CUBE_BLr_inverse, | 78 | [TRANS_RDr] = { TRANS_CUBE_RDr_INVERSE }, |
| 79 | [TRANS_RDm] = TRANS_CUBE_BRm_inverse, | 79 | [TRANS_RDm] = { TRANS_CUBE_RDm_INVERSE }, |
| 80 | [TRANS_RBr] = TRANS_CUBE_RBr_inverse, | 80 | [TRANS_RBr] = { TRANS_CUBE_RBr_INVERSE }, |
| 81 | [TRANS_RBm] = TRANS_CUBE_LBm_inverse, | 81 | [TRANS_RBm] = { TRANS_CUBE_RBm_INVERSE }, |
| 82 | [TRANS_LUr] = TRANS_CUBE_FLr_inverse, | 82 | [TRANS_LUr] = { TRANS_CUBE_LUr_INVERSE }, |
| 83 | [TRANS_LUm] = TRANS_CUBE_FRm_inverse, | 83 | [TRANS_LUm] = { TRANS_CUBE_LUm_INVERSE }, |
| 84 | [TRANS_LFr] = TRANS_CUBE_RFr_inverse, | 84 | [TRANS_LFr] = { TRANS_CUBE_LFr_INVERSE }, |
| 85 | [TRANS_LFm] = TRANS_CUBE_LFm_inverse, | 85 | [TRANS_LFm] = { TRANS_CUBE_LFm_INVERSE }, |
| 86 | [TRANS_LDr] = TRANS_CUBE_BRr_inverse, | 86 | [TRANS_LDr] = { TRANS_CUBE_LDr_INVERSE }, |
| 87 | [TRANS_LDm] = TRANS_CUBE_BLm_inverse, | 87 | [TRANS_LDm] = { TRANS_CUBE_LDm_INVERSE }, |
| 88 | [TRANS_LBr] = TRANS_CUBE_LBr_inverse, | 88 | [TRANS_LBr] = { TRANS_CUBE_LBr_INVERSE }, |
| 89 | [TRANS_LBm] = TRANS_CUBE_RBm_inverse, | 89 | [TRANS_LBm] = { TRANS_CUBE_LBm_INVERSE }, |
| 90 | [TRANS_FUr] = TRANS_CUBE_FUr_inverse, | 90 | [TRANS_FUr] = { TRANS_CUBE_FUr_INVERSE }, |
| 91 | [TRANS_FUm] = TRANS_CUBE_FUm_inverse, | 91 | [TRANS_FUm] = { TRANS_CUBE_FUm_INVERSE }, |
| 92 | [TRANS_FRr] = TRANS_CUBE_RUr_inverse, | 92 | [TRANS_FRr] = { TRANS_CUBE_FRr_INVERSE }, |
| 93 | [TRANS_FRm] = TRANS_CUBE_LUm_inverse, | 93 | [TRANS_FRm] = { TRANS_CUBE_FRm_INVERSE }, |
| 94 | [TRANS_FDr] = TRANS_CUBE_BUr_inverse, | 94 | [TRANS_FDr] = { TRANS_CUBE_FDr_INVERSE }, |
| 95 | [TRANS_FDm] = TRANS_CUBE_BUm_inverse, | 95 | [TRANS_FDm] = { TRANS_CUBE_FDm_INVERSE }, |
| 96 | [TRANS_FLr] = TRANS_CUBE_LUr_inverse, | 96 | [TRANS_FLr] = { TRANS_CUBE_FLr_INVERSE }, |
| 97 | [TRANS_FLm] = TRANS_CUBE_RUm_inverse, | 97 | [TRANS_FLm] = { TRANS_CUBE_FLm_INVERSE }, |
| 98 | [TRANS_BUr] = TRANS_CUBE_FDr_inverse, | 98 | [TRANS_BUr] = { TRANS_CUBE_BUr_INVERSE }, |
| 99 | [TRANS_BUm] = TRANS_CUBE_FDm_inverse, | 99 | [TRANS_BUm] = { TRANS_CUBE_BUm_INVERSE }, |
| 100 | [TRANS_BRr] = TRANS_CUBE_LDr_inverse, | 100 | [TRANS_BRr] = { TRANS_CUBE_BRr_INVERSE }, |
| 101 | [TRANS_BRm] = TRANS_CUBE_RDm_inverse, | 101 | [TRANS_BRm] = { TRANS_CUBE_BRm_INVERSE }, |
| 102 | [TRANS_BDr] = TRANS_CUBE_BDr_inverse, | 102 | [TRANS_BDr] = { TRANS_CUBE_BDr_INVERSE }, |
| 103 | [TRANS_BDm] = TRANS_CUBE_BDm_inverse, | 103 | [TRANS_BDm] = { TRANS_CUBE_BDm_INVERSE }, |
| 104 | [TRANS_BLr] = TRANS_CUBE_RDr_inverse, | 104 | [TRANS_BLr] = { TRANS_CUBE_BLr_INVERSE }, |
| 105 | [TRANS_BLm] = TRANS_CUBE_LDm_inverse, | 105 | [TRANS_BLm] = { TRANS_CUBE_BLm_INVERSE }, |
| 106 | }; | 106 | }; |
| 107 | 107 | ||
| 108 | STATIC cube_t | 108 | STATIC cube_t |
| @@ -114,8 +114,8 @@ transform_edges(cube_t c, uint8_t t) | |||
| 114 | "transform: invalid transformation %" PRIu8 | 114 | "transform: invalid transformation %" PRIu8 |
| 115 | ", must be between 0 and 47\n", t); | 115 | ", must be between 0 and 47\n", t); |
| 116 | 116 | ||
| 117 | trans_cube = cube_trans_table[t]; | 117 | trans_cube = cubefromarray_single(cube_trans_table[t]); |
| 118 | trans_inv = cube_trans_table_inverse[t]; | 118 | trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); |
| 119 | 119 | ||
| 120 | ret = compose_edges(trans_cube, c); | 120 | ret = compose_edges(trans_cube, c); |
| 121 | ret = compose_edges(ret, trans_inv); | 121 | ret = compose_edges(ret, trans_inv); |
| @@ -132,8 +132,8 @@ transform_corners(cube_t c, uint8_t t) | |||
| 132 | "transform: invalid transformation %" PRIu8 | 132 | "transform: invalid transformation %" PRIu8 |
| 133 | ", must be between 0 and 47\n", t); | 133 | ", must be between 0 and 47\n", t); |
| 134 | 134 | ||
| 135 | trans_cube = cube_trans_table[t]; | 135 | trans_cube = cubefromarray_single(cube_trans_table[t]); |
| 136 | trans_inv = cube_trans_table_inverse[t]; | 136 | trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); |
| 137 | 137 | ||
| 138 | ret = compose_corners(trans_cube, c); | 138 | ret = compose_corners(trans_cube, c); |
| 139 | ret = compose_corners(ret, trans_inv); | 139 | ret = compose_corners(ret, trans_inv); |
| @@ -150,8 +150,8 @@ transform(cube_t c, uint8_t t) | |||
| 150 | "transform: invalid transformation %" PRIu8 | 150 | "transform: invalid transformation %" PRIu8 |
| 151 | ", must be between 0 and 47\n", t); | 151 | ", must be between 0 and 47\n", t); |
| 152 | 152 | ||
| 153 | trans_cube = cube_trans_table[t]; | 153 | trans_cube = cubefromarray_single(cube_trans_table[t]); |
| 154 | trans_inv = cube_trans_table_inverse[t]; | 154 | trans_inv = cubefromarray_single(cube_trans_table_inverse[t]); |
| 155 | 155 | ||
| 156 | ret = compose(trans_cube, c); | 156 | ret = compose(trans_cube, c); |
| 157 | ret = compose(ret, trans_inv); | 157 | ret = compose(ret, trans_inv); |
