diff options
Diffstat (limited to 'src/core/constants.h')
| -rw-r--r-- | src/core/constants.h | 76 |
1 files changed, 58 insertions, 18 deletions
diff --git a/src/core/constants.h b/src/core/constants.h index 2908f28..fb1450e 100644 --- a/src/core/constants.h +++ b/src/core/constants.h | |||
| @@ -348,22 +348,22 @@ | |||
| 348 | #define NMOVES_EXTENDED (1+MOVE_z3) | 348 | #define NMOVES_EXTENDED (1+MOVE_z3) |
| 349 | #define NTRANS (1+TRANS_BLm) | 349 | #define NTRANS (1+TRANS_BLm) |
| 350 | 350 | ||
| 351 | #define MM_ALLMOVES UINT32_C(0x3FFFF) | 351 | #define MM_SINGLE(m) (UINT64_C(1) << (uint64_t)(m)) |
| 352 | #define MM_NOHALFTURNS UINT32_C(0x2DB6D) | 352 | #define MM18_ALLMOVES UINT64_C(0x3FFFF) |
| 353 | #define MM_SINGLE(m) (UINT32_C(1) << (uint32_t)(m)) | 353 | #define MM18_NOHALFTURNS UINT64_C(0x2DB6D) |
| 354 | #define MM_FACE(m) (UINT32_C(7) << (uint32_t)(m)) | 354 | #define MM18_FACE(m) (UINT64_C(7) << (uint64_t)(m)) |
| 355 | #define MM_EO (\ | 355 | #define MM18_EO (\ |
| 356 | MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\ | 356 | MM18_FACE(MOVE_U) | MM18_FACE(MOVE_D) |\ |
| 357 | MM_FACE(MOVE_R) | MM_FACE(MOVE_L) |\ | 357 | MM18_FACE(MOVE_R) | MM18_FACE(MOVE_L) |\ |
| 358 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) | 358 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) |
| 359 | #define MM_DR (\ | 359 | #define MM18_DR (\ |
| 360 | MM_FACE(MOVE_U) | MM_FACE(MOVE_D) |\ | 360 | MM18_FACE(MOVE_U) | MM18_FACE(MOVE_D) |\ |
| 361 | MM_SINGLE(MOVE_R2) | MM_SINGLE(MOVE_L2) |\ | 361 | MM_SINGLE(MOVE_R2) | MM_SINGLE(MOVE_L2) |\ |
| 362 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) | 362 | MM_SINGLE(MOVE_F2) | MM_SINGLE(MOVE_B2)) |
| 363 | #define MM_HTR (MM_ALLMOVES & ~MM_NOHALFTURNS) | 363 | #define MM18_HTR (MM18_ALLMOVES & ~MM18_NOHALFTURNS) |
| 364 | 364 | ||
| 365 | #define TM_ALLTRANS UINT64_C(0xFFFFFFFFFFFF) | ||
| 366 | #define TM_SINGLE(t) (UINT64_C(1) << (uint64_t)(t)) | 365 | #define TM_SINGLE(t) (UINT64_C(1) << (uint64_t)(t)) |
| 366 | #define TM_ALLTRANS UINT64_C(0xFFFFFFFFFFFF) | ||
| 367 | #define TM_UDRLFIX (\ | 367 | #define TM_UDRLFIX (\ |
| 368 | TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_UFm) | \ | 368 | TM_SINGLE(TRANS_UFr) | TM_SINGLE(TRANS_UBr) | TM_SINGLE(TRANS_UFm) | \ |
| 369 | TM_SINGLE(TRANS_UBm) | TM_SINGLE(TRANS_DFr) | TM_SINGLE(TRANS_DBr) | \ | 369 | TM_SINGLE(TRANS_UBm) | TM_SINGLE(TRANS_DFr) | TM_SINGLE(TRANS_DBr) | \ |
| @@ -423,13 +423,26 @@ | |||
| 423 | #define ORIENTATION_BU UINT8_C(22) | 423 | #define ORIENTATION_BU UINT8_C(22) |
| 424 | #define ORIENTATION_BL UINT8_C(23) | 424 | #define ORIENTATION_BL UINT8_C(23) |
| 425 | 425 | ||
| 426 | STATIC const uint32_t allowedmask[] = { | 426 | /* This is only meant to work for the 18 base moves, for now */ |
| 427 | UINT32_C(0x3FFF8), | 427 | STATIC const uint64_t allowedmask[] = { |
| 428 | UINT32_C(0x3FFC0), | 428 | [MOVE_U / 3] = UINT64_C(0x3FFF8), |
| 429 | UINT32_C(0x3FE3F), | 429 | [MOVE_D / 3] = UINT64_C(0x3FFC0), |
| 430 | UINT32_C(0x3F03F), | 430 | [MOVE_R / 3] = UINT64_C(0x3FE3F), |
| 431 | UINT32_C(0x38FFF), | 431 | [MOVE_L / 3] = UINT64_C(0x3F03F), |
| 432 | UINT32_C(0x00FFF) | 432 | [MOVE_F / 3] = UINT64_C(0x38FFF), |
| 433 | [MOVE_B / 3] = UINT64_C(0x00FFF), | ||
| 434 | [MOVE_Uw / 3] = 0, | ||
| 435 | [MOVE_Dw / 3] = 0, | ||
| 436 | [MOVE_Rw / 3] = 0, | ||
| 437 | [MOVE_Lw / 3] = 0, | ||
| 438 | [MOVE_Fw / 3] = 0, | ||
| 439 | [MOVE_Bw / 3] = 0, | ||
| 440 | [MOVE_M / 3] = 0, | ||
| 441 | [MOVE_S / 3] = 0, | ||
| 442 | [MOVE_E / 3] = 0, | ||
| 443 | [MOVE_x / 3] = 0, | ||
| 444 | [MOVE_y / 3] = 0, | ||
| 445 | [MOVE_z / 3] = 0, | ||
| 433 | }; | 446 | }; |
| 434 | 447 | ||
| 435 | STATIC const char *cornerstr[] = { | 448 | STATIC const char *cornerstr[] = { |
| @@ -682,6 +695,33 @@ STATIC uint8_t trans_move_table[][3] = { | |||
| 682 | [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, | 695 | [TRANS_BLm] = { MOVE_B, MOVE_U, MOVE_R }, |
| 683 | }; | 696 | }; |
| 684 | 697 | ||
| 698 | STATIC uint8_t orientation_moves[][3] = { | ||
| 699 | [ORIENTATION_UF] = { UINT8_MAX }, | ||
| 700 | [ORIENTATION_UR] = { MOVE_y, UINT8_MAX }, | ||
| 701 | [ORIENTATION_UB] = { MOVE_y2, UINT8_MAX }, | ||
| 702 | [ORIENTATION_UL] = { MOVE_y3, UINT8_MAX }, | ||
| 703 | [ORIENTATION_DF] = { MOVE_z2, UINT8_MAX }, | ||
| 704 | [ORIENTATION_DR] = { MOVE_y, MOVE_z2, UINT8_MAX }, | ||
| 705 | [ORIENTATION_DB] = { MOVE_y2, MOVE_z2, UINT8_MAX }, | ||
| 706 | [ORIENTATION_DL] = { MOVE_y3, MOVE_z2, UINT8_MAX }, | ||
| 707 | [ORIENTATION_RF] = { MOVE_z3, UINT8_MAX }, | ||
| 708 | [ORIENTATION_RD] = { MOVE_z3, MOVE_y, UINT8_MAX }, | ||
| 709 | [ORIENTATION_RB] = { MOVE_z3, MOVE_y2, UINT8_MAX }, | ||
| 710 | [ORIENTATION_RU] = { MOVE_z3, MOVE_y3, UINT8_MAX }, | ||
| 711 | [ORIENTATION_LF] = { MOVE_z, UINT8_MAX }, | ||
| 712 | [ORIENTATION_LD] = { MOVE_z, MOVE_y3, UINT8_MAX }, | ||
| 713 | [ORIENTATION_LB] = { MOVE_z, MOVE_y2, UINT8_MAX }, | ||
| 714 | [ORIENTATION_LU] = { MOVE_z, MOVE_y, UINT8_MAX }, | ||
| 715 | [ORIENTATION_FD] = { MOVE_x, UINT8_MAX }, | ||
| 716 | [ORIENTATION_FR] = { MOVE_x, MOVE_y, UINT8_MAX }, | ||
| 717 | [ORIENTATION_FU] = { MOVE_x, MOVE_y2, UINT8_MAX }, | ||
| 718 | [ORIENTATION_FL] = { MOVE_x, MOVE_y3, UINT8_MAX }, | ||
| 719 | [ORIENTATION_BD] = { MOVE_x3, MOVE_y2, UINT8_MAX }, | ||
| 720 | [ORIENTATION_BR] = { MOVE_x3, MOVE_y, UINT8_MAX }, | ||
| 721 | [ORIENTATION_BU] = { MOVE_x3, UINT8_MAX }, | ||
| 722 | [ORIENTATION_BL] = { MOVE_x3, MOVE_y3, UINT8_MAX }, | ||
| 723 | }; | ||
| 724 | |||
| 685 | STATIC uint8_t orientation_transition_table[][3] = { | 725 | STATIC uint8_t orientation_transition_table[][3] = { |
| 686 | [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, | 726 | [ORIENTATION_UF] = { ORIENTATION_FD, ORIENTATION_UR, ORIENTATION_LF }, |
| 687 | [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, | 727 | [ORIENTATION_UR] = { ORIENTATION_RD, ORIENTATION_UB, ORIENTATION_FR }, |
