@@ -464,7 +464,7 @@ void GameTreeNodeRep::CopySubtree(GameTreeNodeRep *src, GameTreeNodeRep *stop)
464464 }
465465
466466 if (src->m_children .size ()) {
467- AppendMove (src->m_infoset );
467+ m_efg-> AppendMove (this , src->m_infoset );
468468 for (auto dest_child = m_children.begin (), src_child = src->m_children .begin ();
469469 src_child != src->m_children .end (); src_child++, dest_child++) {
470470 (*dest_child)->CopySubtree (*src_child, stop);
@@ -488,7 +488,7 @@ void GameTreeNodeRep::CopyTree(GameNode p_src)
488488 auto *src = dynamic_cast <GameTreeNodeRep *>(p_src.operator ->());
489489
490490 if (!src->m_children .empty ()) {
491- AppendMove (src->m_infoset );
491+ m_efg-> AppendMove (this , src->m_infoset );
492492 for (auto dest_child = m_children.begin (), src_child = src->m_children .begin ();
493493 src_child != src->m_children .end (); src_child++, dest_child++) {
494494 (*dest_child)->CopySubtree (*src_child, this );
@@ -577,38 +577,41 @@ GameInfoset GameTreeRep::LeaveInfoset(GameNode p_node)
577577 return node->m_infoset ;
578578}
579579
580- GameInfoset GameTreeNodeRep ::AppendMove (GamePlayer p_player, int p_actions)
580+ GameInfoset GameTreeRep ::AppendMove (GameNode p_node, GamePlayer p_player, int p_actions)
581581{
582- if (p_actions <= 0 || !m_children.empty ()) {
582+ auto *node = dynamic_cast <GameTreeNodeRep *>(p_node.operator ->());
583+ if (p_actions <= 0 || !node->m_children .empty ()) {
583584 throw UndefinedException ();
584585 }
585- if (p_player->GetGame () != m_efg ) {
586+ if (p_node-> GetGame () != this || p_player->GetGame () != this ) {
586587 throw MismatchException ();
587588 }
588589
589- m_efg-> IncrementVersion ();
590+ IncrementVersion ();
590591 return AppendMove (
591- new GameTreeInfosetRep (m_efg , p_player->m_infosets .size () + 1 , p_player, p_actions));
592+ p_node, new GameTreeInfosetRep (this , p_player->m_infosets .size () + 1 , p_player, p_actions));
592593}
593594
594- GameInfoset GameTreeNodeRep ::AppendMove (GameInfoset p_infoset)
595+ GameInfoset GameTreeRep ::AppendMove (GameNode p_node, GameInfoset p_infoset)
595596{
596- if (!m_children.empty ()) {
597+ auto *node = dynamic_cast <GameTreeNodeRep *>(p_node.operator ->());
598+ if (!node->m_children .empty ()) {
597599 throw UndefinedException ();
598600 }
599- if (p_infoset->GetGame () != m_efg ) {
601+ if (p_node-> GetGame () != this || p_infoset->GetGame () != this ) {
600602 throw MismatchException ();
601603 }
602604
603- m_efg->IncrementVersion ();
604- m_infoset = dynamic_cast <GameTreeInfosetRep *>(p_infoset.operator ->());
605- m_infoset->AddMember (this );
606- std::for_each (
607- m_infoset->m_actions .begin (), m_infoset->m_actions .end (),
608- [this ](const GameActionRep *) { m_children.push_back (new GameTreeNodeRep (m_efg, this )); });
609- m_efg->ClearComputedValues ();
610- m_efg->Canonicalize ();
611- return m_infoset;
605+ IncrementVersion ();
606+ node->m_infoset = dynamic_cast <GameTreeInfosetRep *>(p_infoset.operator ->());
607+ node->m_infoset ->AddMember (node);
608+ std::for_each (node->m_infoset ->m_actions .begin (), node->m_infoset ->m_actions .end (),
609+ [this , node](const GameActionRep *) {
610+ node->m_children .push_back (new GameTreeNodeRep (this , node));
611+ });
612+ ClearComputedValues ();
613+ Canonicalize ();
614+ return node->m_infoset ;
612615}
613616
614617GameInfoset GameTreeNodeRep::InsertMove (GamePlayer p_player, int p_actions)
0 commit comments