tanton_engine/movepick/
pick.rs

1use std::fmt;
2use std::mem;
3
4#[repr(u8)]
5#[derive(Copy, Clone)]
6pub enum Pick {
7    // Main Searching Algo
8    MainSearch = 0,
9    CapturesInit = 1,
10    GoodCaptures = 2,
11    KillerOne = 3,
12    KillerTwo = 4,
13    CounterMove = 5,
14    QuietInit = 6,
15    QuietMoves = 7,
16    BadCaptures = 8,
17    // Evasions, Main and Qsearch
18    EvasionSearch = 9,
19    EvasionsInit = 10,
20    AllEvasions = 11,
21    // ProbCut Searching
22    ProbCutSearch = 12,
23    ProbCutCapturesInit = 13,
24    ProbCutCaptures = 14,
25    // QSearch - Non Re-Captures
26    QSearch = 15,
27    QSearchInit = 16,
28    QCaptures = 17,
29    QChecks = 18,
30    // Q Search ReCaptures
31    QSearchRecaptures = 19,
32    QRecaptures = 20,
33}
34
35impl Pick {
36    pub fn incr(&mut self) {
37        unsafe {
38            *self = mem::transmute(*self as u8 + 1);
39        }
40    }
41
42    pub fn to_string(self) -> &'static str {
43        match self {
44            Pick::MainSearch => "MainSearch",
45            Pick::CapturesInit => "CapturesInit",
46            Pick::GoodCaptures => "GoodCaptures",
47            Pick::KillerOne => "KillerOne",
48            Pick::KillerTwo => "KillerTwo",
49            Pick::CounterMove => "CounterMove",
50            Pick::QuietInit => "QuietInit",
51            Pick::QuietMoves => "QuietMoves",
52            Pick::BadCaptures => "BadCaptures",
53            Pick::EvasionSearch => "EvasionSearch",
54            Pick::EvasionsInit => "EvasionsInit",
55            Pick::AllEvasions => "AllEvasions",
56            Pick::ProbCutSearch => "ProbCutSearch",
57            Pick::ProbCutCapturesInit => "ProbCutCapturesInit",
58            Pick::ProbCutCaptures => "ProbCutCaptures",
59            Pick::QSearch => "QSearch",
60            Pick::QSearchInit => "QSearchInit",
61            Pick::QCaptures => "QCaptures",
62            Pick::QChecks => "QChecks",
63            Pick::QSearchRecaptures => "QSearchRecaptures",
64            Pick::QRecaptures => "QRecaptures",
65        }
66    }
67}
68
69impl fmt::Display for Pick {
70    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
71        f.pad(&self.to_string())
72    }
73}
74
75// types
76
77// Root
78// MainSearch
79// Evasions
80// ProbCut
81// Qsearch
82
83// Strategy
84
85// RootMoves -------
86// Get the next rootmoves.
87
88// MainSearch ------
89// TT Move
90//      Increment.
91//      Return TT move
92// Captures_init
93//      Generate Captures
94//      Sort<Captures>
95//      Increment
96//      Go to next_move();
97// Good_Captures
98//      Loop through each capture, once done increment stage
99// Killer0
100//      Do KillerMove1, increment
101// Killer1
102//      Do KillerMove2, increment
103// CounterMove
104//      Do CounterMove, increment
105// Quiet_Init
106//      Generate Quiets
107//      Sort<Quiets>
108//      Partial Insertion sort?
109//      Increment
110//      Go to next_move();
111// Quiet
112//
113// Bad Captures
114//
115
116// Evasions -------
117// TT Move
118//      Return TT move, Increment.
119// Evasions_init
120// All_evasions
121
122// ProbCut
123// TT Move
124//      Return TT move, Increment.
125// Probcut_Captures_Init
126// Probvut Captures
127
128// Qsearch -----------
129// TT Move
130//      Return TT move, Increment.
131// QCaptures_Init
132// QCaptures
133// QChecks
134// QSearch_Recaptures
135// QRecaptures