aboutsummaryrefslogtreecommitdiff
path: root/src/base_tab/gamebase/PGNGameBase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/base_tab/gamebase/PGNGameBase.cpp')
-rw-r--r--src/base_tab/gamebase/PGNGameBase.cpp61
1 files changed, 40 insertions, 21 deletions
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp
index 39775d1..08c8803 100644
--- a/src/base_tab/gamebase/PGNGameBase.cpp
+++ b/src/base_tab/gamebase/PGNGameBase.cpp
@@ -1,35 +1,54 @@
#include "PGNGameBase.hpp"
-PGNGameBase::PGNGameBase(std::string pgn_file)
- : pgn(new pgnp::PGN()), hasNextGame(false) {
+PGNGameBase::PGNGameBase(std::string pgn_file) : pgn(new pgnp::PGN()) {
+ file = pgn_file;
pgn->FromFile(pgn_file);
- ParseNextGame();
}
-bool PGNGameBase::HasNextGame() { return (hasNextGame); }
-
-void PGNGameBase::ParseNextGame() {
+bool PGNGameBase::NextGame() {
+ bool game_found = false;
try {
pgn->ParseNextGame();
- hasNextGame = true;
+ game_found = true;
} catch (...) {
- hasNextGame = false;
+ game_found = false;
}
+ return (game_found);
}
-Game *PGNGameBase::GetNextGame() {
- 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));
+std::string PGNGameBase::GetTag(std::string tag) {
+ if (pgn->HasTag(tag)) {
+ return (pgn->GetTagValue(tag));
}
+ return ("");
+}
- ParseNextGame();
- return (g);
+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);
}