diff options
Diffstat (limited to 'src/HalfMove.cpp')
| -rw-r--r-- | src/HalfMove.cpp | 66 |
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 |
