#include "PrincipalVariation.hpp" #include #include PrincipalVariation::PrincipalVariation(const std::vector &v, bool isMate): mMoves(v), mIsMate(isMate) { } PrincipalVariation::PrincipalVariation(const std::vector &v, Board &board): mMoves(v) { for (const auto &kMove : v) { board.makeMove(kMove); } mIsMate = board.isCheckMate(); if (mIsMate || v.empty()) { mScore = static_cast(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; }