aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-01-24 21:03:30 +0100
committerLoic Guegan <manzerbredes@mailbox.org>2022-01-24 21:03:30 +0100
commite817ac6bed46737839b592b4308c6d525d70aa2d (patch)
tree276749dbe6017a6052dd6985e15ee7610a49ec0e /src
parentbdd879586efd906e10f07663e99b20027f7bb8ad (diff)
Improve PGNP API
Diffstat (limited to 'src')
-rw-r--r--src/pgnp.cpp24
-rw-r--r--src/pgnp.hpp3
2 files changed, 24 insertions, 3 deletions
diff --git a/src/pgnp.cpp b/src/pgnp.cpp
index 7f9c450..3262a5e 100644
--- a/src/pgnp.cpp
+++ b/src/pgnp.cpp
@@ -16,7 +16,7 @@
namespace pgnp {
-HalfMove::HalfMove() : isBlack(false), MainLine(NULL) {}
+HalfMove::HalfMove() : count(-1), isBlack(false), MainLine(NULL) {}
HalfMove::~HalfMove() {
for (auto *move : variations) {
@@ -55,6 +55,26 @@ int HalfMove::GetLength() {
return length;
}
+void HalfMove::Copy(HalfMove* copy){
+ copy->count=count;
+ copy->isBlack=isBlack;
+ copy->move=move;
+ copy->comment=comment;
+
+ // Copy MainLine
+ if(MainLine!=NULL){
+ copy->MainLine=new HalfMove();
+ MainLine->Copy(copy->MainLine);
+ }
+
+ // Copy variation
+ for(HalfMove *var:variations){
+ HalfMove *new_var=new HalfMove();
+ copy->variations.push_back(new_var);
+ var->Copy(new_var);
+ }
+}
+
PGN::~PGN() {
if (moves != NULL)
delete moves;
@@ -265,7 +285,7 @@ int PGN::ParseNextTag(int start_loc) {
return (valueloc + 1); // +1 For the last char of the tag which is ']'
}
-HalfMove *PGN::GetMoves() { return (moves); }
+void PGN::GetMoves(HalfMove* copy) { moves->Copy(copy); }
std::vector<std::string> PGN::GetTagList() { return tagkeys; }
diff --git a/src/pgnp.hpp b/src/pgnp.hpp
index 53a7a59..492dfc0 100644
--- a/src/pgnp.hpp
+++ b/src/pgnp.hpp
@@ -29,6 +29,7 @@ public:
int GetLength();
/// @brief Dump move and all its variations
void Dump();
+ void Copy(HalfMove* copy);
};
class PGN {
@@ -52,7 +53,7 @@ public:
std::vector<std::string> GetTagList();
std::string GetTagValue(std::string);
std::string GetResult();
- HalfMove *GetMoves();
+ void GetMoves(HalfMove*);
private:
/// @brief Populate @a tags with by parsing the one starting at location in