aboutsummaryrefslogtreecommitdiff
path: root/src/HalfMove.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/HalfMove.cpp')
-rw-r--r--src/HalfMove.cpp66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/HalfMove.cpp b/src/HalfMove.cpp
new file mode 100644
index 0000000..7c7a85e
--- /dev/null
+++ b/src/HalfMove.cpp
@@ -0,0 +1,66 @@
+#include "HalfMove.hpp"
+
+namespace pgnp {
+
+HalfMove::HalfMove() : count(-1), isBlack(false), MainLine(NULL) {}
+
+HalfMove::~HalfMove() {
+ for (auto *move : variations) {
+ delete move;
+ }
+}
+
+std::string HalfMove::NestedDump(HalfMove *m, int indent) {
+ std::stringstream ss;
+
+ for (int i = 0; i < indent; i++) {
+ ss << " ";
+ }
+ ss << " "
+ << " Move=" << m->move << " Count=" << m->count << " Comment=\""
+ << m->comment << "\""
+ << " IsBlack=" << m->isBlack << " Variations=" << m->variations.size()
+ << std::endl;
+
+ for (auto *var : m->variations) {
+ ss << NestedDump(var, indent + 1);
+ }
+
+ if (m->MainLine != NULL) {
+ ss << NestedDump(m->MainLine, indent);
+ }
+ return (ss.str());
+}
+
+std::string HalfMove::Dump() { return (NestedDump(this, 0)); }
+
+int HalfMove::GetLength() {
+ int length = 0;
+ HalfMove *m = this;
+ while (m != NULL) {
+ length++;
+ m = m->MainLine;
+ }
+ 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);
+ }
+}
+} // namespace pgnp \ No newline at end of file