Add forgotten files 1.4.70b
[polyglot.git] / move_legal.c
index ecf3fd2..cf19baf 100644 (file)
-\r
-// move_legal.c\r
-\r
-// includes\r
-\r
-#include "attack.h"\r
-#include "colour.h"\r
-#include "fen.h"\r
-#include "list.h"\r
-#include "move.h"\r
-#include "move_do.h"\r
-#include "move_gen.h"\r
-#include "move_legal.h"\r
-#include "piece.h"\r
-#include "square.h"\r
-#include "util.h"\r
-\r
-// prototypes\r
-\r
-static bool move_is_legal_debug (int move, const board_t * board);\r
-\r
-// functions\r
-\r
-// move_is_pseudo()\r
-\r
-bool move_is_pseudo(int move, const board_t * board) {\r
-\r
-   list_t list[1];\r
-\r
-   ASSERT(move_is_ok(move));\r
-   ASSERT(board_is_ok(board));\r
-\r
-   gen_moves(list,board);\r
-\r
-   return list_contain(list,move);\r
-}\r
-\r
-// pseudo_is_legal()\r
-\r
-bool pseudo_is_legal(int move, const board_t * board) {\r
-\r
-   board_t new_board[1];\r
-\r
-   ASSERT(move_is_ok(move));\r
-   ASSERT(board_is_ok(board));\r
-\r
-   ASSERT(move_is_pseudo(move,board));\r
-\r
-   board_copy(new_board,board);\r
-   move_do(new_board,move);\r
-\r
-   return !is_in_check(new_board,colour_opp(new_board->turn));\r
-}\r
-\r
-// move_is_legal()\r
-\r
-bool move_is_legal(int move, const board_t * board) {\r
-\r
-   bool legal;\r
-\r
-   ASSERT(move_is_ok(move));\r
-   ASSERT(board_is_ok(board));\r
-\r
-   legal = move_is_pseudo(move,board) && pseudo_is_legal(move,board);\r
-   ASSERT(legal==move_is_legal_debug(move,board));\r
-\r
-   return legal;\r
-}\r
-\r
-// filter_legal()\r
-\r
-void filter_legal(list_t * list, const board_t * board) {\r
-\r
-   int pos;\r
-   int i, move, value;\r
-\r
-   ASSERT(list_is_ok(list));\r
-   ASSERT(board_is_ok(board));\r
-\r
-   pos = 0;\r
-\r
-   for (i = 0; i < list_size(list); i++) {\r
-\r
-      ASSERT(pos>=0&&pos<=i);\r
-\r
-      move = list_move(list,i);\r
-      value = list_value(list,i);\r
-\r
-      if (pseudo_is_legal(move,board)) {\r
-         list->move[pos] = move;\r
-         list->value[pos] = value;\r
-         pos++;\r
-      }\r
-   }\r
-\r
-   ASSERT(pos>=0&&pos<=list_size(list));\r
-   list->size = pos;\r
-}\r
-\r
-// move_is_legal_debug()\r
-\r
-static bool move_is_legal_debug(int move, const board_t * board) {\r
-\r
-   list_t list[1];\r
-\r
-   ASSERT(move_is_ok(move));\r
-   ASSERT(board_is_ok(board));\r
-\r
-   gen_legal_moves(list,board);\r
-\r
-   return list_contain(list,move);\r
-}\r
-\r
-// end of move_legal.cpp\r
-\r
+
+// move_legal.c
+
+// includes
+
+#include "attack.h"
+#include "colour.h"
+#include "fen.h"
+#include "list.h"
+#include "move.h"
+#include "move_do.h"
+#include "move_gen.h"
+#include "move_legal.h"
+#include "piece.h"
+#include "square.h"
+#include "util.h"
+
+// prototypes
+
+static bool move_is_legal_debug (int move, const board_t * board);
+
+// functions
+
+// move_is_pseudo()
+
+bool move_is_pseudo(int move, const board_t * board) {
+
+   list_t list[1];
+
+   ASSERT(move_is_ok(move));
+   ASSERT(board_is_ok(board));
+
+   gen_moves(list,board);
+
+   return list_contain(list,move);
+}
+
+// pseudo_is_legal()
+
+bool pseudo_is_legal(int move, const board_t * board) {
+
+   board_t new_board[1];
+
+   ASSERT(move_is_ok(move));
+   ASSERT(board_is_ok(board));
+
+   ASSERT(move_is_pseudo(move,board));
+
+   board_copy(new_board,board);
+   move_do(new_board,move);
+
+   return !is_in_check(new_board,colour_opp(new_board->turn));
+}
+
+// move_is_legal()
+
+bool move_is_legal(int move, const board_t * board) {
+
+   bool legal;
+
+   ASSERT(move_is_ok(move));
+   ASSERT(board_is_ok(board));
+
+   legal = move_is_pseudo(move,board) && pseudo_is_legal(move,board);
+   ASSERT(legal==move_is_legal_debug(move,board));
+
+   return legal;
+}
+
+// filter_legal()
+
+void filter_legal(list_t * list, const board_t * board) {
+
+   int pos;
+   int i, move, value;
+
+   ASSERT(list_is_ok(list));
+   ASSERT(board_is_ok(board));
+
+   pos = 0;
+
+   for (i = 0; i < list_size(list); i++) {
+
+      ASSERT(pos>=0&&pos<=i);
+
+      move = list_move(list,i);
+      value = list_value(list,i);
+
+      if (pseudo_is_legal(move,board)) {
+         list->move[pos] = move;
+         list->value[pos] = value;
+         pos++;
+      }
+   }
+
+   ASSERT(pos>=0&&pos<=list_size(list));
+   list->size = pos;
+}
+
+// move_is_legal_debug()
+
+static bool move_is_legal_debug(int move, const board_t * board) {
+
+   list_t list[1];
+
+   ASSERT(move_is_ok(move));
+   ASSERT(board_is_ok(board));
+
+   gen_legal_moves(list,board);
+
+   return list_contain(list,move);
+}
+
+// end of move_legal.cpp
+