tensor_predictors/dataAnalysis/chess/Rchess/src/board.cpp

57 lines
2.0 KiB
C++

#include <vector>
#include <Rcpp.h>
#include "SchachHoernchen/Board.h"
//' Given a FEN (position) determines if its whites turn
// [[Rcpp::export(rng = false)]]
Rcpp::LogicalVector isWhiteTurn(const std::vector<Board>& positions) {
// Iterate all positions and call the static board evaluation
return Rcpp::LogicalVector(positions.begin(), positions.end(),
[](const Board& pos) { return pos.isWhiteTurn(); }
);
}
//' Check if current side to move is in check
// [[Rcpp::export(rng = false)]]
Rcpp::LogicalVector isCheck(const std::vector<Board>& positions) {
return Rcpp::LogicalVector(positions.begin(), positions.end(),
[](const Board& pos) { return pos.isCheck(); }
);
}
//' Check if the current position is a quiet position (no piece is attacked)
// [[Rcpp::export(rng = false)]]
Rcpp::LogicalVector isQuiet(const std::vector<Board>& positions) {
return Rcpp::LogicalVector(positions.begin(), positions.end(),
[](const Board& pos) { return pos.isQuiet(); }
);
}
//' Check if position is terminal
//'
//' Checks if the position is a terminal position, meaning if the game ended
//' by mate, stale mate or the 50 modes rule. Three-Fold repetition is NOT
//' checked, therefore a seperate game history is required which the board
//' does NOT track.
//'
// [[Rcpp::export(rng = false)]]
Rcpp::LogicalVector isTerminal(const std::vector<Board>& positions) {
return Rcpp::LogicalVector(positions.begin(), positions.end(),
[](const Board& pos) { return pos.isTerminal(); }
);
}
//' Check if checkmate is possible by material on the board
//'
//' Checks if there is sufficient mating material on the board, meaning if it
//' possible for any side to deliver a check mate. More specifically, it
//' checks if the pieces on the board are KK, KNK or KBK.
//'
// [[Rcpp::export(rng = false)]]
Rcpp::LogicalVector isInsufficient(const std::vector<Board>& positions) {
return Rcpp::LogicalVector(positions.begin(), positions.end(),
[](const Board& pos) { return pos.isInsufficient(); }
);
}