diff options
| author | Loic Guegan <manzerbredes@mailbox.org> | 2022-02-24 12:09:21 +0100 |
|---|---|---|
| committer | Loic Guegan <manzerbredes@mailbox.org> | 2022-02-24 12:09:21 +0100 |
| commit | 40c6df0e7c3f17204a6187eb2bc241f396720272 (patch) | |
| tree | 52d97a27c701b31ef6cd833f84a4eefc3e7f826a /src/base_tab/gamebase | |
| parent | 32a0b3e31f1bb0024e96915f58afd991a992d945 (diff) | |
Improve BaseTab implementation for PGN files
Diffstat (limited to 'src/base_tab/gamebase')
| -rw-r--r-- | src/base_tab/gamebase/PGNGameBase.cpp | 36 | ||||
| -rw-r--r-- | src/base_tab/gamebase/PGNGameBase.hpp | 9 |
2 files changed, 40 insertions, 5 deletions
diff --git a/src/base_tab/gamebase/PGNGameBase.cpp b/src/base_tab/gamebase/PGNGameBase.cpp index 09d87d8..39775d1 100644 --- a/src/base_tab/gamebase/PGNGameBase.cpp +++ b/src/base_tab/gamebase/PGNGameBase.cpp @@ -1,5 +1,35 @@ #include "PGNGameBase.hpp" -PGNGameBase::PGNGameBase(std::string pgn_file) { - -}
\ No newline at end of file +PGNGameBase::PGNGameBase(std::string pgn_file) + : pgn(new pgnp::PGN()), hasNextGame(false) { + pgn->FromFile(pgn_file); + ParseNextGame(); +} + +bool PGNGameBase::HasNextGame() { return (hasNextGame); } + +void PGNGameBase::ParseNextGame() { + try { + pgn->ParseNextGame(); + hasNextGame = true; + } catch (...) { + hasNextGame = false; + } +} + +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)); + } + + ParseNextGame(); + return (g); +} diff --git a/src/base_tab/gamebase/PGNGameBase.hpp b/src/base_tab/gamebase/PGNGameBase.hpp index 2aa0840..b58bdca 100644 --- a/src/base_tab/gamebase/PGNGameBase.hpp +++ b/src/base_tab/gamebase/PGNGameBase.hpp @@ -1,10 +1,15 @@ #include "GameBase.hpp" +#include "pgnp.hpp" class PGNGameBase : public GameBase { + pgnp::PGN *pgn; + bool hasNextGame; + + void ParseNextGame(); public: PGNGameBase(std::string pgn_file); - bool HasNextGame() { return (false); } + bool HasNextGame(); Game *GetGame(std::uint32_t id) { return (new Game()); }; - Game *GetNextGame() { return (new Game()); }; + Game *GetNextGame(); };
\ No newline at end of file |
