54 lines
1.2 KiB
C++
54 lines
1.2 KiB
C++
#include "PrincipalVariation.hpp"
|
|
|
|
#include <ostream>
|
|
#include <vector>
|
|
|
|
|
|
PrincipalVariation::PrincipalVariation(const std::vector<Move> &v, bool isMate): mMoves(v), mIsMate(isMate) {
|
|
|
|
}
|
|
|
|
PrincipalVariation::PrincipalVariation(const std::vector<Move> &v, Board &board): mMoves(v) {
|
|
for (const auto &kMove : v) {
|
|
board.makeMove(kMove);
|
|
}
|
|
|
|
mIsMate = board.isCheckMate();
|
|
if (mIsMate || v.empty()) {
|
|
mScore = static_cast<int>(v.size());
|
|
} else {
|
|
mScore = board.evaluate();
|
|
}
|
|
}
|
|
|
|
|
|
bool PrincipalVariation::isMate() const {
|
|
return mIsMate;
|
|
}
|
|
|
|
int PrincipalVariation::score() const {
|
|
return mScore;
|
|
}
|
|
|
|
std::size_t PrincipalVariation::length() const {
|
|
return mMoves.size();
|
|
}
|
|
|
|
PrincipalVariation::MoveIter PrincipalVariation::begin() const {
|
|
return mMoves.begin();
|
|
}
|
|
|
|
PrincipalVariation::MoveIter PrincipalVariation::end() const {
|
|
return mMoves.end();
|
|
}
|
|
std::ostream &operator<<(std::ostream &os, const PrincipalVariation &pv) {
|
|
os << "isMate=" << pv.isMate();
|
|
os << " score=" << pv.score();
|
|
os << " length=" << pv.length() << std::endl;
|
|
os << "Moves:" << std::endl;
|
|
for (const auto &item : pv) {
|
|
os << item << std::endl;
|
|
}
|
|
return os;
|
|
}
|