libscid 0.1.0
Chess applications made easy.
Loading...
Searching...
No Matches
game_cursor.h
1#pragma once
2
3#include "scid/core/game.h"
4#include "scid/core/movetext_location.h"
6
7#include <cstddef>
8#include <optional>
9#include <vector>
10
11namespace scid::core {
12
14private:
15 struct ParentFrame {
16 const MoveSequence* line = nullptr;
17 std::size_t nextIndex = 0;
18 std::size_t variationIndex = 0;
19 };
20
21public:
22 explicit GameCursor(const Game& game);
23
24 const Move* previousMove() const;
25 const Move* nextMove() const;
26 const Variation* currentVariation() const;
27 std::vector<const Move*> movesToCursor() const;
28 std::optional<scid::core::Position> currentPosition() const;
29 std::size_t ply() const;
30 std::size_t variationCount() const;
31 std::size_t variationDepth() const;
32 std::size_t variationIndex() const;
33
34 bool isAtLineStart() const;
35 bool isAtLineEnd() const;
36 bool isAtVariationStart() const;
37 bool isAtVariationEnd() const;
38 bool isAtGameStart() const;
39 bool isAtGameEnd() const;
40 bool isAtEmptyVariation() const;
41
42 bool next();
43 bool previous();
44 bool enterVariation(std::size_t index);
45 bool exitVariation();
46 void toStart();
47 void toEnd();
48 bool toPly(std::size_t ply);
49
50 MovetextLocation location() const;
51 bool restore(MovetextLocation location);
52
53private:
54 const MoveSequence& currentLine() const;
55
56 const Game& game_;
57 const MoveSequence* currentLine_ = nullptr;
58 std::size_t nextIndex_ = 0;
59 std::vector<ParentFrame> parents_;
60};
61
62} // namespace scid::core
Definition game_cursor.h:13
Definition game.h:85
Definition movetext_location.h:11
Chess position state, move generation, and notation support.
Definition game.h:69
Definition game.h:60
Definition game.h:75