libscid 0.1.0
Chess applications made easy.
Loading...
Searching...
No Matches
game.h
1#pragma once
2
3#include "scid/core/date.h"
4#include "scid/core/error.h"
5#include "scid/core/game_result.h"
6#include "scid/core/move.h"
7#include "scid/core/nags.h"
8#include "scid/core/notation.h"
10#include "scid/core/rating.h"
11
12#include <cstddef>
13#include <cstdint>
14#include <optional>
15#include <string>
16#include <string_view>
17#include <utility>
18#include <vector>
19
20namespace scid::core {
21
22class MovetextCursor;
23
24using TagPair = std::pair<std::string, std::string>;
25
26struct Rating {
27 scid::core::ratingT value = 0;
28 scid::core::ratingTypeT type = scid::core::RATING_Elo;
29};
30
31struct Player {
32 std::string name;
33 Rating rating;
34};
35
36struct EventInfo {
37 std::string name;
38 std::string site;
39 std::string round;
40 scid::core::dateT date = scid::core::ZERO_DATE;
41 scid::core::dateT eventDate = scid::core::ZERO_DATE;
42};
43
44struct GameHeader {
45 EventInfo event;
46 Player white;
47 Player black;
48 scid::core::resultT result = scid::core::RESULT_None;
49 std::string eco;
50 std::vector<TagPair> tags;
51};
52
54 std::vector<Nag> nags;
55 std::string comment;
56};
57
58struct Variation;
59
60struct Move {
61 Variation& addVariation(std::string_view initialComment = {});
62
63 MoveSpec spec;
64 std::string san;
65 MoveMetadata metadata;
66 std::vector<Variation> childVariations;
67};
68
70 Move& appendMove(MoveSpec spec);
71
72 std::vector<Move> moves;
73};
74
75struct Variation {
76 std::string initialComment;
77 MoveSequence line;
78};
79
80struct Movetext {
81 std::string initialComment;
82 MoveSequence mainline;
83};
84
85class Game {
86public:
87 Game();
88
89 void clear();
90
91 const GameHeader& header() const;
92 const Movetext& movetext() const;
93 std::string_view initialComment() const;
94 std::size_t mainlineHalfMoveCount() const;
95 const std::string& event() const;
96 const std::string& site() const;
97 const std::string& round() const;
98 const Player& white() const;
99 const Player& black() const;
100 scid::core::dateT date() const;
101 scid::core::dateT eventDate() const;
102 scid::core::resultT result() const;
103 std::string_view resultString() const;
104 const std::string& eco() const;
105 scid::core::ratingT averageRating() const;
106
107 void setEvent(std::string_view value);
108 void setSite(std::string_view value);
109 void setRound(std::string_view value);
110 void setWhiteName(std::string_view value);
111 void setBlackName(std::string_view value);
112 void setWhite(Player value);
113 void setBlack(Player value);
114 void setWhiteRating(Rating value);
115 void setBlackRating(Rating value);
116 void setDate(scid::core::dateT value);
117 void setEventDate(scid::core::dateT value);
118 void setResult(scid::core::resultT value);
119 void setEco(std::string_view value);
120
121 std::string& addTag(std::string_view tag, std::string_view value);
122 std::string& findOrCreateTag(std::string_view tag);
123 const std::vector<TagPair>& extraTags() const;
124 const std::string* findExtraTag(std::string_view tag) const;
125 void clearExtraTags();
126 void removeExtraTag(std::string_view tag);
127
128 bool hasNonStandardStart() const;
129 bool hasNonStandardStart(char* outFen, std::size_t outFenLen) const;
130 scid::core::Position* startPosition();
131 const scid::core::Position* startPosition() const;
132 scid::core::errorT setStartFen(const char* fen);
133 void setStartPosition(const scid::core::Position& position);
134 void clearStartPosition();
135 long long initialPlyCounter() const;
136
137 Move& appendMainlineMove(MoveSpec spec);
138 void setInitialComment(std::string_view value);
139 void clearMovetext();
140 void stripMovetext(bool variations, bool comments, bool nags);
141
142private:
143 friend class MovetextCursor;
144
145 std::string* findStandardTag(std::string_view tag);
146
147 GameHeader header_;
148 Movetext movetext_;
149 std::optional<scid::core::Position> startPosition_;
150};
151
152} // namespace scid::core
Definition game.h:85
Definition movetext_cursor.h:12
Definition position.h:44
Shared status and error codes.
Portable move intent.
Chess position state, move generation, and notation support.
Definition game.h:36
Definition game.h:44
Definition game.h:53
Definition game.h:69
Definition move.h:12
Definition game.h:60
Definition game.h:80
Definition game.h:31
Definition game.h:26
Definition game.h:75