diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/cube.h | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/src/core/cube.h b/src/core/cube.h index fe36f90..b24fb5c 100644 --- a/src/core/cube.h +++ b/src/core/cube.h | |||
| @@ -285,6 +285,113 @@ move(cube_t c, uint8_t m) | |||
| 285 | } | 285 | } |
| 286 | } | 286 | } |
| 287 | 287 | ||
| 288 | _static cube_t | ||
| 289 | premove(cube_t c, uint8_t m){ | ||
| 290 | switch (m) { | ||
| 291 | case _move_U: | ||
| 292 | return _premove(U3, c); | ||
| 293 | case _move_U2: | ||
| 294 | return _premove(U2, c); | ||
| 295 | case _move_U3: | ||
| 296 | return _premove(U, c); | ||
| 297 | case _move_D: | ||
| 298 | return _premove(D3, c); | ||
| 299 | case _move_D2: | ||
| 300 | return _premove(D2, c); | ||
| 301 | case _move_D3: | ||
| 302 | return _premove(D, c); | ||
| 303 | case _move_R: | ||
| 304 | return _premove(R3, c); | ||
| 305 | case _move_R2: | ||
| 306 | return _premove(R2, c); | ||
| 307 | case _move_R3: | ||
| 308 | return _premove(R, c); | ||
| 309 | case _move_L: | ||
| 310 | return _premove(L3, c); | ||
| 311 | case _move_L2: | ||
| 312 | return _premove(L2, c); | ||
| 313 | case _move_L3: | ||
| 314 | return _premove(L, c); | ||
| 315 | case _move_F: | ||
| 316 | return _premove(F3, c); | ||
| 317 | case _move_F2: | ||
| 318 | return _premove(F2, c); | ||
| 319 | case _move_F3: | ||
| 320 | return _premove(F, c); | ||
| 321 | case _move_B: | ||
| 322 | return _premove(B3, c); | ||
| 323 | case _move_B2: | ||
| 324 | return _premove(B2, c); | ||
| 325 | case _move_B3: | ||
| 326 | return _premove(B, c); | ||
| 327 | default: | ||
| 328 | LOG("move error, unknown move\n"); | ||
| 329 | return zero; | ||
| 330 | } | ||
| 331 | } | ||
| 332 | _static uint8_t | ||
| 333 | invertmove(uint8_t m) | ||
| 334 | { | ||
| 335 | switch (m) { | ||
| 336 | case _move_U: | ||
| 337 | return _move_U3; | ||
| 338 | case _move_U2: | ||
| 339 | return _move_U2; | ||
| 340 | case _move_U3: | ||
| 341 | return _move_U; | ||
| 342 | case _move_D: | ||
| 343 | return _move_D3; | ||
| 344 | case _move_D2: | ||
| 345 | return _move_D2; | ||
| 346 | case _move_D3: | ||
| 347 | return _move_D; | ||
| 348 | case _move_R: | ||
| 349 | return _move_R3; | ||
| 350 | case _move_R2: | ||
| 351 | return _move_R2; | ||
| 352 | case _move_R3: | ||
| 353 | return _move_R; | ||
| 354 | case _move_L: | ||
| 355 | return _move_L3; | ||
| 356 | case _move_L2: | ||
| 357 | return _move_L2; | ||
| 358 | case _move_L3: | ||
| 359 | return _move_L; | ||
| 360 | case _move_F: | ||
| 361 | return _move_F3; | ||
| 362 | case _move_F2: | ||
| 363 | return _move_F2; | ||
| 364 | case _move_F3: | ||
| 365 | return _move_F; | ||
| 366 | case _move_B: | ||
| 367 | return _move_B3; | ||
| 368 | case _move_B2: | ||
| 369 | return _move_B2; | ||
| 370 | case _move_B3: | ||
| 371 | return _move_B; | ||
| 372 | default: | ||
| 373 | LOG("invertmove error, unknown move\n"); | ||
| 374 | return _error; | ||
| 375 | } | ||
| 376 | } | ||
| 377 | |||
| 378 | _static uint8_t* | ||
| 379 | invertpremoves(uint8_t *moves, uint8_t nmoves) | ||
| 380 | { | ||
| 381 | uint8_t i; | ||
| 382 | uint8_t *ret = malloc(nmoves * sizeof(uint8_t)); | ||
| 383 | |||
| 384 | for (i = 0; i < nmoves; i++) | ||
| 385 | ret[i] = invertmove(moves[i]); | ||
| 386 | |||
| 387 | // invert elements in the array | ||
| 388 | for (i = 0; i < nmoves / 2; i++) | ||
| 389 | _swap(ret[i], ret[nmoves - i - 1]); | ||
| 390 | return ret; | ||
| 391 | } | ||
| 392 | |||
| 393 | |||
| 394 | |||
| 288 | /* | 395 | /* |
| 289 | TODO transform is now relegated to a separated file because it is too long. | 396 | TODO transform is now relegated to a separated file because it is too long. |
| 290 | It would be nice to make it shorter without loosing performance. | 397 | It would be nice to make it shorter without loosing performance. |
