blob: 7da640574692d0aa0011cf76efe4e206dae5cba7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
_static_inline bool allowednextmove(uint8_t *, uint8_t);
_static_inline uint8_t inverse_trans(uint8_t);
_static_inline uint8_t movebase(uint8_t);
_static_inline uint8_t moveaxis(uint8_t);
_static bool
allowednextmove(uint8_t *moves, uint8_t n)
{
uint8_t base[3], axis[3];
if (n < 2)
return true;
base[0] = movebase(moves[n-1]);
axis[0] = moveaxis(moves[n-1]);
base[1] = movebase(moves[n-2]);
axis[1] = moveaxis(moves[n-2]);
if (base[0] == base[1] || (axis[0] == axis[1] && base[0] < base[1]))
return false;
if (n == 2)
return true;
base[2] = movebase(moves[n-3]);
axis[2] = moveaxis(moves[n-3]);
return axis[1] != axis[2] || base[0] != base[2];
}
_static_inline uint8_t
inverse_trans(uint8_t t)
{
return inverse_trans_table[t];
}
_static_inline uint8_t
movebase(uint8_t move)
{
return move / 3;
}
_static_inline uint8_t
moveaxis(uint8_t move)
{
return move / 6;
}
|