coordinates_unoptimized.h (1012B)
1 STATIC_INLINE int64_t coord_cp(cube_t); 2 STATIC_INLINE cube_t invcoord_cp(int64_t); 3 STATIC_INLINE int64_t coord_epud(cube_t); 4 STATIC_INLINE cube_t invcoord_epud(int64_t); 5 6 STATIC_INLINE int64_t 7 coord_cp(cube_t cube) 8 { 9 int i; 10 uint8_t c[8], e[12]; 11 12 pieces(&cube, c, e); 13 for (i = 0; i < 8; i++) 14 c[i] &= PBITS; 15 16 return permtoindex(8, c); 17 } 18 19 STATIC_INLINE cube_t 20 invcoord_cp(int64_t i) 21 { 22 uint8_t c[8]; 23 24 indextoperm(i, 8, c); 25 26 return STATIC_CUBE(c[0], c[1], c[2], c[3], c[4], c[5], c[6], c[7], 27 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11); 28 } 29 30 STATIC_INLINE int64_t 31 coord_epud(cube_t cube) 32 { 33 int i; 34 uint8_t c[8], e[12]; 35 36 pieces(&cube, c, e); 37 DBG_ASSERT(isperm(8, e), -1, 38 "Cannot compute epud coordinate: edges not separated"); 39 40 for (i = 0; i < 8; i++) 41 e[i] &= PBITS; 42 43 return permtoindex(8, e); 44 } 45 46 STATIC_INLINE cube_t 47 invcoord_epud(int64_t i) 48 { 49 uint8_t e[8]; 50 51 indextoperm(i, 8, e); 52 53 return STATIC_CUBE(0, 1, 2, 3, 4, 5, 6, 7, 54 e[0], e[1], e[2], e[3], e[4], e[5], e[6], e[7], 8, 9, 10, 11); 55 }