nissy-core

The "engine" of nissy, including the H48 optimal solver.
git clone https://git.tronto.net/nissy-core
Download | Log | Files | Refs | README | LICENSE

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 }