aboutsummaryrefslogtreecommitdiff
path: root/src/core/constants.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/constants.h')
-rw-r--r--src/core/constants.h76
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
426STATIC const uint32_t allowedmask[] = { 426/* This is only meant to work for the 18 base moves, for now */
427 UINT32_C(0x3FFF8), 427STATIC 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
435STATIC const char *cornerstr[] = { 448STATIC 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
698STATIC 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
685STATIC uint8_t orientation_transition_table[][3] = { 725STATIC 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 },

Generated with cgit - Back to sebastiano.tronto.net