From 3b11b9d4f3eee5faa656d7ee61077e80726bdc36 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Mon, 16 Jan 2023 14:55:48 +0100 Subject: Improve openings database code --- src/game_tab/HalfMove.cpp | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) (limited to 'src/game_tab/HalfMove.cpp') diff --git a/src/game_tab/HalfMove.cpp b/src/game_tab/HalfMove.cpp index 32924e1..0bac980 100644 --- a/src/game_tab/HalfMove.cpp +++ b/src/game_tab/HalfMove.cpp @@ -20,6 +20,38 @@ HalfMove::~HalfMove() { } } +void HalfMove::SetOpening(const std::string &name, const std::string &eco){ + HalfMove *m=this; + while(m!=nullptr){ + m->opening=name; + m->eco=eco; + if(m->parent != nullptr && m->parent->mainline==m) + m=m->parent; + else + break; + } +} + +void HalfMove::GetOpening(std::string &name, std::string &eco){ + name=this->opening; + eco=this->eco; +} + +std::vector HalfMove::GetLine(){ + std::vector line; + HalfMove *m=this; + while(m!=nullptr){ + line.push_back(m); + // Check if in a variation: + if(m->parent!=nullptr && m->parent->mainline!=m) + m=m->parent->parent; // Because we are in a variation + else + m=m->parent; + } + std::reverse(line.begin(), line.end()); + return line; +} + HalfMove::HalfMove(HalfMove *m){ src=m->src; dst=m->dst; -- cgit v1.2.3