#include "PGNGameBase.hpp" PGNGameBase::PGNGameBase(std::string pgn_file) : pgn(new pgnp::PGN()) { file = pgn_file; pgn->FromFile(pgn_file); } bool PGNGameBase::NextGame() { bool game_found = false; try { pgn->ParseNextGame(); game_found = true; } catch (...) { game_found = false; } return (game_found); } std::string PGNGameBase::GetTag(std::string tag) { if (pgn->HasTag(tag)) { return (pgn->GetTagValue(tag)); } return (""); } void PGNGameBase::Reset() { delete pgn; pgn = new pgnp::PGN(); pgn->FromFile(file); } Game *PGNGameBase::GetGame(std::uint32_t id) { Reset(); std::uint32_t curid = 0; while(NextGame()) { if (id == curid) { pgnp::HalfMove *pgnp_moves = new pgnp::HalfMove(); pgn->GetMoves(pgnp_moves); std::string fen = "rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1"; if (pgn->HasTag("FEN")) { fen = pgn->GetTagValue("FEN"); } HalfMove *m = new HalfMove(pgnp_moves, fen); Game *g = new Game(m, fen); for (std::string &s : pgn->GetTagList()) { g->SetTag(s, pgn->GetTagValue(s)); } return (g); } curid++; } return (NULL); }