diff options
| author | Sebastiano Tronto <sebastiano@tronto.net> | 2025-04-23 12:26:52 +0200 |
|---|---|---|
| committer | Sebastiano Tronto <sebastiano@tronto.net> | 2025-04-23 12:26:52 +0200 |
| commit | d969dc0ad57d3e1e346df719cf9f2708ee87d2e7 (patch) | |
| tree | fefabeab15041177dc2458079664c358e4406a51 /src | |
| parent | 6f750160507b87c9ea31899c0199e9b336e8ddae (diff) | |
| download | nissy-core-d969dc0ad57d3e1e346df719cf9f2708ee87d2e7.tar.gz nissy-core-d969dc0ad57d3e1e346df719cf9f2708ee87d2e7.zip | |
Almost added support for wide moves, only solve missing
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/constants.h | 118 | ||||
| -rw-r--r-- | src/core/moves.h | 97 | ||||
| -rw-r--r-- | src/core/transform.h | 18 |
3 files changed, 185 insertions, 48 deletions
diff --git a/src/core/constants.h b/src/core/constants.h index e8b80ae..6505689 100644 --- a/src/core/constants.h +++ b/src/core/constants.h | |||
| @@ -580,7 +580,7 @@ STATIC const char *transstr[] = { | |||
| 580 | [TRANS_BLm] = "mirrored BL", | 580 | [TRANS_BLm] = "mirrored BL", |
| 581 | }; | 581 | }; |
| 582 | 582 | ||
| 583 | static uint8_t inverse_trans_table[] = { | 583 | STATIC uint8_t inverse_trans_table[] = { |
| 584 | [TRANS_UFr] = TRANS_UFr, | 584 | [TRANS_UFr] = TRANS_UFr, |
| 585 | [TRANS_UFm] = TRANS_UFm, | 585 | [TRANS_UFm] = TRANS_UFm, |
| 586 | [TRANS_ULr] = TRANS_URr, | 586 | [TRANS_ULr] = TRANS_URr, |
| @@ -631,7 +631,7 @@ static uint8_t inverse_trans_table[] = { | |||
| 631 | [TRANS_BLm] = TRANS_LDm, | 631 | [TRANS_BLm] = TRANS_LDm, |
| 632 | }; | 632 | }; |
| 633 | 633 | ||
| 634 | static uint8_t trans_move_table[][3] = { | 634 | STATIC uint8_t trans_move_table[][3] = { |
| 635 | [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F }, | 635 | [TRANS_UFr] = { MOVE_U, MOVE_R, MOVE_F }, |
| 636 | [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F }, | 636 | [TRANS_UFm] = { MOVE_U, MOVE_L, MOVE_F }, |
| 637 | [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L }, | 637 | [TRANS_ULr] = { MOVE_U, MOVE_F, MOVE_L }, |
| @@ -682,7 +682,7 @@ static uint8_t trans_move_table[][3] = { | |||
| 682 | [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, | 682 | [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, |
| 683 | }; | 683 | }; |
| 684 | 684 | ||
| 685 | static uint8_t orientation_transition_table[][3] = { | 685 | STATIC uint8_t orientation_transition_table[][3] = { |
| 686 | [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, | 686 | [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, |
| 687 | [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, | 687 | [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, |
| 688 | [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB }, | 688 | [ORIENTATION_UB] = { ORIENTATION_BD, ORIENTATION_UL, ORIENTATION_RB }, |
| @@ -709,26 +709,94 @@ static uint8_t orientation_transition_table[][3] = { | |||
| 709 | [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL }, | 709 | [ORIENTATION_BL] = { ORIENTATION_LF, ORIENTATION_BD, ORIENTATION_DL }, |
| 710 | }; | 710 | }; |
| 711 | 711 | ||
| 712 | static struct { | 712 | STATIC uint8_t orientation_trans[] = { |
| 713 | uint8_t moves[3]; | 713 | [ORIENTATION_UF] = TRANS_UFr, |
| 714 | uint8_t rotations[6]; | 714 | [ORIENTATION_UR] = TRANS_URr, |
| 715 | } equivalent_move_table[] = { | 715 | [ORIENTATION_UB] = TRANS_UBr, |
| 716 | [MOVE_U] = { { MOVE_U, UINT8_MAX }, {UINT8_MAX} }, | 716 | [ORIENTATION_UL] = TRANS_ULr, |
| 717 | [MOVE_U2] = { { MOVE_U2, UINT8_MAX }, {UINT8_MAX} }, | 717 | [ORIENTATION_DF] = TRANS_DFr, |
| 718 | [MOVE_U3] = { { MOVE_U3, UINT8_MAX }, {UINT8_MAX} }, | 718 | [ORIENTATION_DR] = TRANS_DRr, |
| 719 | [MOVE_D] = { { MOVE_D, UINT8_MAX }, {UINT8_MAX} }, | 719 | [ORIENTATION_DB] = TRANS_DBr, |
| 720 | [MOVE_D2] = { { MOVE_D2, UINT8_MAX }, {UINT8_MAX} }, | 720 | [ORIENTATION_DL] = TRANS_DLr, |
| 721 | [MOVE_D3] = { { MOVE_D3, UINT8_MAX }, {UINT8_MAX} }, | 721 | [ORIENTATION_RF] = TRANS_RFr, |
| 722 | [MOVE_R] = { { MOVE_R, UINT8_MAX }, {UINT8_MAX} }, | 722 | [ORIENTATION_RD] = TRANS_RDr, |
| 723 | [MOVE_R2] = { { MOVE_R2, UINT8_MAX }, {UINT8_MAX} }, | 723 | [ORIENTATION_RB] = TRANS_RBr, |
| 724 | [MOVE_R3] = { { MOVE_R3, UINT8_MAX }, {UINT8_MAX} }, | 724 | [ORIENTATION_RU] = TRANS_RUr, |
| 725 | [MOVE_L] = { { MOVE_L, UINT8_MAX }, {UINT8_MAX} }, | 725 | [ORIENTATION_LF] = TRANS_LFr, |
| 726 | [MOVE_L2] = { { MOVE_L2, UINT8_MAX }, {UINT8_MAX} }, | 726 | [ORIENTATION_LD] = TRANS_LDr, |
| 727 | [MOVE_L3] = { { MOVE_L3, UINT8_MAX }, {UINT8_MAX} }, | 727 | [ORIENTATION_LB] = TRANS_LBr, |
| 728 | [MOVE_F] = { { MOVE_F, UINT8_MAX }, {UINT8_MAX} }, | 728 | [ORIENTATION_LU] = TRANS_LUr, |
| 729 | [MOVE_F2] = { { MOVE_F2, UINT8_MAX }, {UINT8_MAX} }, | 729 | [ORIENTATION_FD] = TRANS_FDr, |
| 730 | [MOVE_F3] = { { MOVE_F3, UINT8_MAX }, {UINT8_MAX} }, | 730 | [ORIENTATION_FR] = TRANS_FRr, |
| 731 | [MOVE_B] = { { MOVE_B, UINT8_MAX }, {UINT8_MAX} }, | 731 | [ORIENTATION_FU] = TRANS_FUr, |
| 732 | [MOVE_B2] = { { MOVE_B2, UINT8_MAX }, {UINT8_MAX} }, | 732 | [ORIENTATION_FL] = TRANS_FLr, |
| 733 | [MOVE_B3] = { { MOVE_B3, UINT8_MAX }, {UINT8_MAX} }, | 733 | [ORIENTATION_BD] = TRANS_BDr, |
| 734 | [ORIENTATION_BR] = TRANS_BRr, | ||
| 735 | [ORIENTATION_BU] = TRANS_BUr, | ||
| 736 | [ORIENTATION_BL] = TRANS_BLr, | ||
| 737 | }; | ||
| 738 | |||
| 739 | typedef struct { | ||
| 740 | uint8_t move[3]; | ||
| 741 | uint8_t rotation[4]; | ||
| 742 | } equivalent_moves_t; | ||
| 743 | |||
| 744 | STATIC equivalent_moves_t equivalent_moves_table[] = { | ||
| 745 | [MOVE_U] = {{MOVE_U, UINT8_MAX}, {UINT8_MAX}}, | ||
| 746 | [MOVE_U2] = {{MOVE_U2, UINT8_MAX}, {UINT8_MAX}}, | ||
| 747 | [MOVE_U3] = {{MOVE_U3, UINT8_MAX}, {UINT8_MAX}}, | ||
| 748 | [MOVE_D] = {{MOVE_D, UINT8_MAX}, {UINT8_MAX}}, | ||
| 749 | [MOVE_D2] = {{MOVE_D2, UINT8_MAX}, {UINT8_MAX}}, | ||
| 750 | [MOVE_D3] = {{MOVE_D3, UINT8_MAX}, {UINT8_MAX}}, | ||
| 751 | [MOVE_R] = {{MOVE_R, UINT8_MAX}, {UINT8_MAX}}, | ||
| 752 | [MOVE_R2] = {{MOVE_R2, UINT8_MAX}, {UINT8_MAX}}, | ||
| 753 | [MOVE_R3] = {{MOVE_R3, UINT8_MAX}, {UINT8_MAX}}, | ||
| 754 | [MOVE_L] = {{MOVE_L, UINT8_MAX}, {UINT8_MAX}}, | ||
| 755 | [MOVE_L2] = {{MOVE_L2, UINT8_MAX}, {UINT8_MAX}}, | ||
| 756 | [MOVE_L3] = {{MOVE_L3, UINT8_MAX}, {UINT8_MAX}}, | ||
| 757 | [MOVE_F] = {{MOVE_F, UINT8_MAX}, {UINT8_MAX}}, | ||
| 758 | [MOVE_F2] = {{MOVE_F2, UINT8_MAX}, {UINT8_MAX}}, | ||
| 759 | [MOVE_F3] = {{MOVE_F3, UINT8_MAX}, {UINT8_MAX}}, | ||
| 760 | [MOVE_B] = {{MOVE_B, UINT8_MAX}, {UINT8_MAX}}, | ||
| 761 | [MOVE_B2] = {{MOVE_B2, UINT8_MAX}, {UINT8_MAX}}, | ||
| 762 | [MOVE_B3] = {{MOVE_B3, UINT8_MAX}, {UINT8_MAX}}, | ||
| 763 | |||
| 764 | [MOVE_Uw] = {{MOVE_D, UINT8_MAX}, {1, UINT8_MAX}}, | ||
| 765 | [MOVE_Uw2] = {{MOVE_D2, UINT8_MAX}, {1, 1, UINT8_MAX}}, | ||
| 766 | [MOVE_Uw3] = {{MOVE_D3, UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, | ||
| 767 | [MOVE_Dw] = {{MOVE_U, UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, | ||
| 768 | [MOVE_Dw2] = {{MOVE_U2, UINT8_MAX}, {1, 1, UINT8_MAX}}, | ||
| 769 | [MOVE_Dw3] = {{MOVE_U3, UINT8_MAX}, {1, UINT8_MAX}}, | ||
| 770 | [MOVE_Rw] = {{MOVE_L, UINT8_MAX}, {0, UINT8_MAX}}, | ||
| 771 | [MOVE_Rw2] = {{MOVE_L2, UINT8_MAX}, {0, 0, UINT8_MAX}}, | ||
| 772 | [MOVE_Rw3] = {{MOVE_L3, UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, | ||
| 773 | [MOVE_Lw] = {{MOVE_R, UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, | ||
| 774 | [MOVE_Lw2] = {{MOVE_R2, UINT8_MAX}, {0, 0, UINT8_MAX}}, | ||
| 775 | [MOVE_Lw3] = {{MOVE_R3, UINT8_MAX}, {0, UINT8_MAX}}, | ||
| 776 | [MOVE_Fw] = {{MOVE_B, UINT8_MAX}, {2, UINT8_MAX}}, | ||
| 777 | [MOVE_Fw2] = {{MOVE_B2, UINT8_MAX}, {2, 2, UINT8_MAX}}, | ||
| 778 | [MOVE_Fw3] = {{MOVE_B3, UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, | ||
| 779 | [MOVE_Bw] = {{MOVE_F, UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, | ||
| 780 | [MOVE_Bw2] = {{MOVE_F2, UINT8_MAX}, {2, 2, UINT8_MAX}}, | ||
| 781 | [MOVE_Bw3] = {{MOVE_F3, UINT8_MAX}, {2, UINT8_MAX}}, | ||
| 782 | |||
| 783 | [MOVE_M] = {{MOVE_R, MOVE_L3, UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, | ||
| 784 | [MOVE_M2] = {{MOVE_R2, MOVE_L2, UINT8_MAX}, {0, 0, UINT8_MAX}}, | ||
| 785 | [MOVE_M3] = {{MOVE_R3, MOVE_L, UINT8_MAX}, {0, UINT8_MAX}}, | ||
| 786 | [MOVE_S] = {{MOVE_F3, MOVE_B, UINT8_MAX}, {2, UINT8_MAX}}, | ||
| 787 | [MOVE_S2] = {{MOVE_F2, MOVE_B2, UINT8_MAX}, {2, 2, UINT8_MAX}}, | ||
| 788 | [MOVE_S3] = {{MOVE_F, MOVE_B3, UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, | ||
| 789 | [MOVE_E] = {{MOVE_U, MOVE_D3, UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, | ||
| 790 | [MOVE_E2] = {{MOVE_U2, MOVE_D2, UINT8_MAX}, {1, 1, UINT8_MAX}}, | ||
| 791 | [MOVE_E3] = {{MOVE_U3, MOVE_D, UINT8_MAX}, {1, UINT8_MAX}}, | ||
| 792 | |||
| 793 | [MOVE_x] = {{UINT8_MAX}, {0, UINT8_MAX}}, | ||
| 794 | [MOVE_x2] = {{UINT8_MAX}, {0, 0, UINT8_MAX}}, | ||
| 795 | [MOVE_x3] = {{UINT8_MAX}, {0, 0, 0, UINT8_MAX}}, | ||
| 796 | [MOVE_y] = {{UINT8_MAX}, {1, UINT8_MAX}}, | ||
| 797 | [MOVE_y2] = {{UINT8_MAX}, {1, 1, UINT8_MAX}}, | ||
| 798 | [MOVE_y3] = {{UINT8_MAX}, {1, 1, 1, UINT8_MAX}}, | ||
| 799 | [MOVE_z] = {{UINT8_MAX}, {2, UINT8_MAX}}, | ||
| 800 | [MOVE_z2] = {{UINT8_MAX}, {2, 2, UINT8_MAX}}, | ||
| 801 | [MOVE_z3] = {{UINT8_MAX}, {2, 2, 2, UINT8_MAX}}, | ||
| 734 | }; | 802 | }; |
diff --git a/src/core/moves.h b/src/core/moves.h index 8ed267d..20544a3 100644 --- a/src/core/moves.h +++ b/src/core/moves.h | |||
| @@ -14,8 +14,13 @@ STATIC_INLINE uint8_t movebase(uint8_t); | |||
| 14 | STATIC_INLINE uint8_t moveaxis(uint8_t); | 14 | STATIC_INLINE uint8_t moveaxis(uint8_t); |
| 15 | STATIC_INLINE bool isbase(uint8_t); | 15 | STATIC_INLINE bool isbase(uint8_t); |
| 16 | STATIC_INLINE bool parallel(uint8_t, uint8_t); | 16 | STATIC_INLINE bool parallel(uint8_t, uint8_t); |
| 17 | STATIC_INLINE uint8_t moveopposite(uint8_t); | ||
| 18 | STATIC_INLINE uint8_t reorient_move(uint8_t, uint8_t); | ||
| 19 | STATIC_INLINE uint8_t movefollow(uint8_t); | ||
| 20 | STATIC uint8_t transform_move(uint8_t, uint8_t); | ||
| 17 | 21 | ||
| 18 | STATIC cube_t move(cube_t, uint8_t); | 22 | STATIC cube_t move(cube_t, uint8_t); |
| 23 | STATIC oriented_cube_t move_extended(oriented_cube_t, uint8_t); | ||
| 19 | STATIC cube_t premove(cube_t, uint8_t); | 24 | STATIC cube_t premove(cube_t, uint8_t); |
| 20 | STATIC uint8_t inverse_move(uint8_t); | 25 | STATIC uint8_t inverse_move(uint8_t); |
| 21 | STATIC void sortparallel_moves(size_t n, uint8_t [n]); | 26 | STATIC void sortparallel_moves(size_t n, uint8_t [n]); |
| @@ -112,14 +117,14 @@ countmoves(const char *buf) | |||
| 112 | { | 117 | { |
| 113 | uint8_t m; | 118 | uint8_t m; |
| 114 | uint64_t c; | 119 | uint64_t c; |
| 120 | int64_t count; | ||
| 115 | 121 | ||
| 122 | count = 0; | ||
| 116 | FOREACH_READMOVE(buf, m, c, INT_MAX, NISSY_ERROR_INVALID_MOVES, | 123 | FOREACH_READMOVE(buf, m, c, INT_MAX, NISSY_ERROR_INVALID_MOVES, |
| 117 | {} | 124 | count += m <= MOVE_Bw3 ? 1 : (m <= MOVE_E3 ? 2 : 0); |
| 118 | ) | 125 | ) |
| 119 | 126 | ||
| 120 | (void)m; /* Ignore "variable set but not used" warning */ | 127 | return count; |
| 121 | |||
| 122 | return (int64_t)c; | ||
| 123 | } | 128 | } |
| 124 | 129 | ||
| 125 | STATIC int64_t | 130 | STATIC int64_t |
| @@ -188,6 +193,9 @@ movebase(uint8_t move) | |||
| 188 | STATIC_INLINE uint8_t | 193 | STATIC_INLINE uint8_t |
| 189 | moveaxis(uint8_t move) | 194 | moveaxis(uint8_t move) |
| 190 | { | 195 | { |
| 196 | if (move > MOVE_B3) | ||
| 197 | return UINT8_ERROR; | ||
| 198 | |||
| 191 | return move / 6; | 199 | return move / 6; |
| 192 | } | 200 | } |
| 193 | 201 | ||
| @@ -209,6 +217,44 @@ moveopposite(uint8_t move) | |||
| 209 | return movebase(move) == 2 * moveaxis(move) ? move + 3 : move - 3; | 217 | return movebase(move) == 2 * moveaxis(move) ? move + 3 : move - 3; |
| 210 | } | 218 | } |
| 211 | 219 | ||
| 220 | STATIC_INLINE uint8_t | ||
| 221 | reorient_move(uint8_t m, uint8_t or) | ||
| 222 | { | ||
| 223 | return transform_move(m, orientation_trans[or]); | ||
| 224 | } | ||
| 225 | |||
| 226 | /* This is currently unused, but it may turn out to be useful at some point */ | ||
| 227 | STATIC_INLINE uint8_t | ||
| 228 | movefollow(uint8_t move) | ||
| 229 | { | ||
| 230 | uint8_t b, m; | ||
| 231 | |||
| 232 | if (move <= MOVE_B3) | ||
| 233 | return move; | ||
| 234 | |||
| 235 | if (move <= MOVE_Bw3) | ||
| 236 | return move - MOVE_Uw; | ||
| 237 | |||
| 238 | b = UINT8_C(3) * (move / UINT8_C(3)); | ||
| 239 | m = move - b; | ||
| 240 | switch (b) { | ||
| 241 | case MOVE_M: | ||
| 242 | return MOVE_L + m; | ||
| 243 | case MOVE_S: | ||
| 244 | return MOVE_F + m; | ||
| 245 | case MOVE_E: | ||
| 246 | return MOVE_D + m; | ||
| 247 | case MOVE_x: | ||
| 248 | return MOVE_R + m; | ||
| 249 | case MOVE_y: | ||
| 250 | return MOVE_U + m; | ||
| 251 | case MOVE_z: | ||
| 252 | return MOVE_F + m; | ||
| 253 | default: | ||
| 254 | return UINT8_ERROR; | ||
| 255 | } | ||
| 256 | } | ||
| 257 | |||
| 212 | STATIC cube_t | 258 | STATIC cube_t |
| 213 | move(cube_t c, uint8_t m) | 259 | move(cube_t c, uint8_t m) |
| 214 | { | 260 | { |
| @@ -255,6 +301,47 @@ move(cube_t c, uint8_t m) | |||
| 255 | } | 301 | } |
| 256 | } | 302 | } |
| 257 | 303 | ||
| 304 | STATIC uint8_t | ||
| 305 | transform_move(uint8_t m, uint8_t t) | ||
| 306 | { | ||
| 307 | uint8_t a, base, modifier; | ||
| 308 | |||
| 309 | a = moveaxis(m); | ||
| 310 | if (a == UINT8_ERROR) | ||
| 311 | return UINT8_ERROR; | ||
| 312 | |||
| 313 | base = trans_move_table[t][a]; | ||
| 314 | if (movebase(m) != 2 * a) | ||
| 315 | base = moveopposite(base); | ||
| 316 | |||
| 317 | modifier = m % 3; | ||
| 318 | if (t >= TRANS_UFm) | ||
| 319 | modifier = 2 - modifier; | ||
| 320 | |||
| 321 | return base + modifier; | ||
| 322 | } | ||
| 323 | |||
| 324 | STATIC oriented_cube_t | ||
| 325 | move_extended(oriented_cube_t c, uint8_t m) | ||
| 326 | { | ||
| 327 | int i; | ||
| 328 | equivalent_moves_t eqm; | ||
| 329 | oriented_cube_t ret; | ||
| 330 | |||
| 331 | eqm = equivalent_moves_table[m]; | ||
| 332 | ret = c; | ||
| 333 | |||
| 334 | for (i = 0; eqm.move[i] != UINT8_MAX; i++) | ||
| 335 | ret.cube = move( | ||
| 336 | ret.cube, reorient_move(eqm.move[i], ret.orientation)); | ||
| 337 | |||
| 338 | for (i = 0; eqm.rotation[i] != UINT8_MAX; i++) | ||
| 339 | ret.orientation = orientation_transition_table[ | ||
| 340 | ret.orientation][eqm.rotation[i]]; | ||
| 341 | |||
| 342 | return ret; | ||
| 343 | } | ||
| 344 | |||
| 258 | /* Applies the INVERSE of m BEFORE the scramble corresponding to c */ | 345 | /* Applies the INVERSE of m BEFORE the scramble corresponding to c */ |
| 259 | STATIC cube_t | 346 | STATIC cube_t |
| 260 | premove(cube_t c, uint8_t m) | 347 | premove(cube_t c, uint8_t m) |
| @@ -345,7 +432,7 @@ applymoves(oriented_cube_t cube, const char *buf) | |||
| 345 | "move error: inconsistent cube\n"); | 432 | "move error: inconsistent cube\n"); |
| 346 | 433 | ||
| 347 | FOREACH_READMOVE(buf, m, c, -1, ZERO_ORIENTED_CUBE, | 434 | FOREACH_READMOVE(buf, m, c, -1, ZERO_ORIENTED_CUBE, |
| 348 | cube.cube = move(cube.cube, m); | 435 | cube = move_extended(cube, m); |
| 349 | ) | 436 | ) |
| 350 | 437 | ||
| 351 | return cube; | 438 | return cube; |
diff --git a/src/core/transform.h b/src/core/transform.h index 763a4ae..d1d2931 100644 --- a/src/core/transform.h +++ b/src/core/transform.h | |||
| @@ -25,7 +25,6 @@ STATIC cube_t transform_corners(cube_t, uint8_t); | |||
| 25 | STATIC cube_t transform(cube_t, uint8_t); | 25 | STATIC cube_t transform(cube_t, uint8_t); |
| 26 | STATIC oriented_cube_t applytrans(oriented_cube_t, const char *); | 26 | STATIC oriented_cube_t applytrans(oriented_cube_t, const char *); |
| 27 | STATIC_INLINE uint8_t inverse_trans(uint8_t); | 27 | STATIC_INLINE uint8_t inverse_trans(uint8_t); |
| 28 | STATIC uint8_t transform_move(uint8_t, uint8_t); | ||
| 29 | STATIC uint64_t symmetry_mask(cube_t); | 28 | STATIC uint64_t symmetry_mask(cube_t); |
| 30 | 29 | ||
| 31 | STATIC uint8_t | 30 | STATIC uint8_t |
| @@ -392,23 +391,6 @@ inverse_trans(uint8_t t) | |||
| 392 | return inverse_trans_table[t]; | 391 | return inverse_trans_table[t]; |
| 393 | } | 392 | } |
| 394 | 393 | ||
| 395 | STATIC uint8_t | ||
| 396 | transform_move(uint8_t m, uint8_t t) | ||
| 397 | { | ||
| 398 | uint8_t a, base, modifier; | ||
| 399 | |||
| 400 | a = moveaxis(m); | ||
| 401 | base = trans_move_table[t][a]; | ||
| 402 | if (movebase(m) != 2 * a) | ||
| 403 | base = moveopposite(base); | ||
| 404 | |||
| 405 | modifier = m % 3; | ||
| 406 | if (t >= TRANS_UFm) | ||
| 407 | modifier = 2 - modifier; | ||
| 408 | |||
| 409 | return base + modifier; | ||
| 410 | } | ||
| 411 | |||
| 412 | STATIC uint64_t | 394 | STATIC uint64_t |
| 413 | symmetry_mask(cube_t cube) | 395 | symmetry_mask(cube_t cube) |
| 414 | { | 396 | { |
