diff options
Diffstat (limited to 'src/alg.c')
| -rw-r--r-- | src/alg.c | 40 |
1 files changed, 22 insertions, 18 deletions
| @@ -474,32 +474,36 @@ unniss(Alg *alg) | |||
| 474 | } | 474 | } |
| 475 | 475 | ||
| 476 | void | 476 | void |
| 477 | init_movesets() | 477 | init_moveset(Moveset *ms) |
| 478 | { | 478 | { |
| 479 | int i, j; | 479 | int j; |
| 480 | uint64_t l, one; | 480 | uint64_t l, one; |
| 481 | Move m, l2, l1; | 481 | Move m, l2, l1; |
| 482 | Moveset *ms; | ||
| 483 | 482 | ||
| 484 | one = 1; | 483 | one = 1; |
| 485 | 484 | ||
| 486 | for (i = 0; i < nmoveset; i++) { | 485 | for (j = 0, m = U; m < NMOVES; m++) |
| 487 | ms = all_ms[i]; | 486 | if (ms->allowed(m)) |
| 487 | ms->sorted_moves[j++] = m; | ||
| 488 | ms->sorted_moves[j] = NULLMOVE; | ||
| 488 | 489 | ||
| 489 | for (j = 0, m = U; m < NMOVES; m++) | 490 | for (l1 = 0; l1 < NMOVES; l1++) { |
| 490 | if (ms->allowed(m)) | 491 | for (l2 = 0; l2 < NMOVES; l2++) { |
| 491 | ms->sorted_moves[j++] = m; | 492 | ms->mask[l2][l1] = 0; |
| 492 | ms->sorted_moves[j] = NULLMOVE; | 493 | for (l=0; ms->sorted_moves[l]!=NULLMOVE; l++) { |
| 493 | 494 | m = ms->sorted_moves[l]; | |
| 494 | for (l1 = 0; l1 < NMOVES; l1++) { | 495 | if (ms->allowed_next(l2, l1, m)) |
| 495 | for (l2 = 0; l2 < NMOVES; l2++) { | 496 | ms->mask[l2][l1] |= (one<<m); |
| 496 | ms->mask[l2][l1] = 0; | ||
| 497 | for (l=0; ms->sorted_moves[l]!=NULLMOVE; l++) { | ||
| 498 | m = ms->sorted_moves[l]; | ||
| 499 | if (ms->allowed_next(l2, l1, m)) | ||
| 500 | ms->mask[l2][l1] |= (one<<m); | ||
| 501 | } | ||
| 502 | } | 497 | } |
| 503 | } | 498 | } |
| 504 | } | 499 | } |
| 505 | } | 500 | } |
| 501 | |||
| 502 | void | ||
| 503 | init_all_movesets() | ||
| 504 | { | ||
| 505 | int i; | ||
| 506 | |||
| 507 | for (i = 0; i < nmoveset; i++) | ||
| 508 | init_moveset(all_ms[i]); | ||
| 509 | } | ||
