/*
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-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
////
+/// 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())
if (!good())
{
cerr << "Failed to open book file " << fileName << endl;
- close();
- exit(EXIT_FAILURE);
+ Application::exit_with_failure();
}
}
/// Book::file_name() returns the file name of the currently active book,
/// or the empty string if no book is open.
-const string Book::file_name() const {
+const string Book::file_name() { // Not const to compile on HP-UX 11.X
return is_open() ? fileName : "";
}
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_moves(pos, mlist);
+ for (MoveStack* cur = mlist; cur != last; cur++)
+ if ((int(cur->move) & 07777) == bookMove)
+ return cur->move;
return MOVE_NONE;
}
if (!good())
{
cerr << "Failed to read book entry at index " << idx << endl;
- close();
- exit(EXIT_FAILURE);
+ Application::exit_with_failure();
}
}