24 #ifndef SCID_MOVETREE_H 25 #define SCID_MOVETREE_H 79 std::fill_n(san,
sizeof(san),
'\0');
83 std::fill_n(nags,
sizeof(nags), 0);
91 template <
typename TNew>
93 const moveT* orig =
this;
94 moveT* top = newMove();
105 auto copy = newMove();
122 auto swap_tmp = move.
prev;
124 swap_tmp->setNext(
this);
128 auto updateParentLink = [](
moveT& parent) {
129 for (
auto tmp = parent.varChild; tmp; tmp = tmp->varChild) {
133 updateParentLink(*
this);
134 updateParentLink(move);
142 return root ? root->getPrevMove() :
nullptr;
145 std::pair<const moveT*, const moveT*>
getParent()
const {
146 const moveT* varStart =
this;
148 varStart = varStart->
prev;
150 return {varStart->
prev, varStart};
154 moveT* varStart =
this;
156 varStart = varStart->
prev;
158 return {varStart->
prev, varStart};
164 auto nextVar = parent.second->varChild;
165 return (nextVar) ? nextVar
166 : (parent.first) ? parent.first->next :
nullptr;
182 for (; parent->varChild && pos != 0; --pos) {
183 parent = parent->varChild;
186 std::swap(parent->varChild, varStart->
varChild);
188 varStart->
prev =
this;
198 while (parent->varChild != varStart) {
199 parent = parent->varChild;
201 std::swap(parent->varChild, varStart->
varChild);
206 #endif // SCID_MOVETREE_H
const moveT * getPrevMove() const
void swapLine(moveT &move)
void insertChild(moveT *varStart, int pos)
void detachChild(moveT *varStart)
std::pair< moveT *, moveT * > getParent()
void appendChild(moveT *varStart)
void setNext(moveT *move)
moveT * cloneLine(moveT *parent, TNew newMove) const
std::pair< const moveT *, const moveT * > getParent() const
const moveT * nextMoveInPGN() const