Files
cpl_cpp-project/PrincipalVariation.cpp
2022-12-23 18:34:34 +01:00

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;
}