From 0b1930307f41db3ea7552d6b2f4666b33c64d26a Mon Sep 17 00:00:00 2001 From: Sebastiano Tronto Date: Sun, 9 Jun 2024 20:06:19 +0200 Subject: More cleanup --- src/cube_portable.h | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/cube_portable.h') diff --git a/src/cube_portable.h b/src/cube_portable.h index 71a7e41..77e803b 100644 --- a/src/cube_portable.h +++ b/src/cube_portable.h @@ -22,6 +22,7 @@ _static_inline void compose_corners_inplace(cube_t, cube_t, cube_t *); _static_inline cube_t compose_edges(cube_t, cube_t); _static_inline cube_t compose_corners(cube_t, cube_t); _static_inline cube_t compose(cube_t, cube_t); +_static_inline cube_t inverse(cube_t); _static_inline int64_t coord_co(cube_t); _static_inline int64_t coord_csep(cube_t); @@ -133,6 +134,27 @@ compose(cube_t c1, cube_t c2) return ret; } +cube_t +inverse(cube_t cube) +{ + uint8_t i, piece, orien; + cube_t ret; + + for (i = 0; i < 12; i++) { + piece = cube.edge[i]; + orien = piece & _eobit; + ret.edge[piece & _pbits] = i | orien; + } + + for (i = 0; i < 8; i++) { + piece = cube.corner[i]; + orien = ((piece << 1) | (piece >> 1)) & _cobits2; + ret.corner[piece & _pbits] = i | orien; + } + + return ret; +} + _static_inline int64_t coord_co(cube_t c) { -- cgit v1.3