]> git.sesse.net Git - stockfish/blobdiff - src/position.cpp
Remove castleRightsMask[] hack
[stockfish] / src / position.cpp
index a389e9c05a6e77d3892ae240b644a3ee730062e7..ade1c5d23327470838bb566ebb665e0a0096578b 100644 (file)
@@ -1,7 +1,7 @@
 /*
   Stockfish, a UCI chess playing engine derived from Glaurung 2.1
   Copyright (C) 2004-2008 Tord Romstad (Glaurung author)
-  Copyright (C) 2008-2009 Marco Costalba
+  Copyright (C) 2008-2010 Marco Costalba, Joona Kiiski, Tord Romstad
 
   Stockfish is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -44,8 +44,6 @@ using std::string;
 //// Variables
 ////
 
-int Position::castleRightsMask[64];
-
 Key Position::zobrist[2][8][64];
 Key Position::zobEp[64];
 Key Position::zobCastle[16];
@@ -87,7 +85,7 @@ Position::Position() {}
 
 Position::Position(const Position& pos) {
 
-  fast_copy(pos);
+  memcpy(this, &pos, sizeof(Position));
   detach(); // Always detach() in copy c'tor to avoid surprises
 }
 
@@ -97,19 +95,6 @@ Position::Position(const string& fen) {
 }
 
 
-/// Position::fast_copy() creates a partial copy of the given position,
-/// only data that changes with a do_move() / undo_move() cycle is copied,
-/// in particular for stateInfo are copied only the pointers, so that the
-/// actual data remains stored in the parent Position. This is not a problem
-/// if the parent Position is known not to be destroyed while we are still alive,
-/// as is the common case, see detach() otherwise.
-
-void Position::fast_copy(const Position& pos) {
-
-  memcpy(this, &pos, sizeof(Position));
-}
-
-
 /// Position::detach() copies the content of the current state and castling
 /// masks inside the position itself. This is needed when the st pointee could
 /// become stale, as example because the caller is about to going out of scope.
@@ -1673,6 +1658,7 @@ Value Position::compute_non_pawn_material(Color c) const {
 /// Position::is_draw() tests whether the position is drawn by material,
 /// repetition, or the 50 moves rule. It does not detect stalemates, this
 /// must be done by the search.
+// FIXME: Currently we are not handling 50 move rule correctly when in check
 
 bool Position::is_draw() const {
 
@@ -1686,7 +1672,7 @@ bool Position::is_draw() const {
       return true;
 
   // Draw by repetition?
-  for (int i = 2; i < Min(Min(gamePly, st->rule50), st->pliesFromNull); i += 2)
+  for (int i = 4; i <= Min(Min(gamePly, st->rule50), st->pliesFromNull); i += 2)
       if (history[gamePly - i] == st->key)
           return true;