X-Git-Url: https://git.sesse.net/?p=stockfish;a=blobdiff_plain;f=src%2Fmove.h;h=e9f7242696c9abf0fa477758b192c47f4ace9dcb;hp=ad7c8378c3a8da003a034d77cb3c4e9529b68a9e;hb=c6c4713ab2fb19e542b13df3b48bd14313bc5ad7;hpb=5dc23121215039938a9ef4e59ae934312774571c diff --git a/src/move.h b/src/move.h index ad7c8378..e9f72426 100644 --- a/src/move.h +++ b/src/move.h @@ -7,12 +7,12 @@ it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. - + Stockfish is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - + You should have received a copy of the GNU General Public License along with this program. If not, see . */ @@ -38,10 +38,22 @@ class Position; +/// A move needs 17 bits to be stored +/// +/// bit 0- 5: destination square (from 0 to 63) +/// bit 6-11: origin square (from 0 to 63) +/// bit 12-14: promotion piece type +/// bit 15: en passant flag +/// bit 16: castle flag +/// +/// Special cases are MOVE_NONE and MOVE_NULL. We can sneak these in +/// because in any normal move destination square is always different +/// from origin square while MOVE_NONE and MOVE_NULL have the same +/// origin and destination square, 0 and 1 respectively. + enum Move { MOVE_NONE = 0, - MOVE_NULL = 65, - MOVE_MAX = 0xFFFFFF + MOVE_NULL = 65 }; @@ -56,11 +68,11 @@ struct MoveStack { //// inline Square move_from(Move m) { - return Square((int(m) >> 6) & 077); + return Square((int(m) >> 6) & 0x3F); } inline Square move_to(Move m) { - return Square(m & 077); + return Square(m & 0x3F); } inline PieceType move_promotion(Move m) {