]> git.sesse.net Git - stockfish/blobdiff - src/book.cpp
Use pointers instead of array indices in MovePicker
[stockfish] / src / book.cpp
index 8e4778eed711813b5ad6c3a46ff77b783aa859c9..0c72d8e80d862d35b9f17aafc5d3f14cf7321a4c 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 Marco Costalba
+  Copyright (C) 2008-2009 Marco Costalba
 
   Stockfish is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
@@ -344,10 +344,21 @@ namespace {
 ////
 
 
+/// Destructor. Be sure file is closed before we leave.
+
+Book::~Book() {
+
+  close();
+}
+
+
 /// Book::open() opens a book file with a given file name
 
 void Book::open(const string& fName) {
 
+  // Close old file before opening the new
+  close();
+
   fileName = fName;
   ifstream::open(fileName.c_str(), ifstream::in | ifstream::binary);
   if (!is_open())
@@ -361,8 +372,7 @@ void Book::open(const string& fName) {
   if (!good())
   {
       cerr << "Failed to open book file " << fileName << endl;
-      close();
-      exit(EXIT_FAILURE);
+      Application::exit_with_failure();
   }
 }
 
@@ -419,11 +429,11 @@ Move Book::get_move(const Position& pos) {
   if (!bookMove)
       return MOVE_NONE;
 
-  MoveStack moves[256];
-  int n = generate_legal_moves(pos, moves);
-  for (int j = 0; j < n; j++)
-      if ((int(moves[j].move) & 07777) == bookMove)
-          return moves[j].move;
+  MoveStack mlist[256];
+  MoveStack* last = generate_legal_moves(pos, mlist);
+  for (MoveStack* cur = mlist; cur != last; cur++)
+      if ((int(cur->move) & 07777) == bookMove)
+          return cur->move;
 
   return MOVE_NONE;
 }
@@ -479,8 +489,7 @@ void Book::read_entry(BookEntry& entry, int idx) {
   if (!good())
   {
       cerr << "Failed to read book entry at index " << idx << endl;
-      close();
-      exit(EXIT_FAILURE);
+      Application::exit_with_failure();
   }
 }