@@ -345,17 +345,17 @@ void GameNodeRep::DeleteOutcome(GameOutcomeRep *outc)
345345 }
346346}
347347
348- void GameTreeRep::SetOutcome (GameNode p_node, const GameOutcome &p_outcome)
348+ void GameTreeRep::SetOutcome (const GameNode & p_node, const GameOutcome &p_outcome)
349349{
350- IncrementVersion ();
351350 if (p_node->m_game != this ) {
352351 throw MismatchException ();
353352 }
354353 if (p_outcome && p_outcome->m_game != this ) {
355354 throw MismatchException ();
356355 }
357- if (p_outcome.get () != p_node->m_outcome ) {
358- p_node->m_outcome = p_outcome.get ();
356+ if (const auto newOutcome = p_outcome.get_shared ().get (); newOutcome != p_node->m_outcome ) {
357+ p_node->m_outcome = newOutcome;
358+ IncrementVersion ();
359359 ClearComputedValues ();
360360 }
361361}
@@ -592,7 +592,8 @@ GameInfoset GameTreeRep::LeaveInfoset(GameNode p_node)
592592 return node->m_infoset ->shared_from_this ();
593593}
594594
595- GameInfoset GameTreeRep::AppendMove (GameNode p_node, GamePlayer p_player, int p_actions)
595+ GameInfoset GameTreeRep::AppendMove (GameNode p_node, GamePlayer p_player, int p_actions,
596+ bool p_generateLabels)
596597{
597598 GameNodeRep *node = p_node.get ();
598599 if (p_actions <= 0 || !node->m_children .empty ()) {
@@ -606,6 +607,10 @@ GameInfoset GameTreeRep::AppendMove(GameNode p_node, GamePlayer p_player, int p_
606607 auto newInfoset = std::make_shared<GameInfosetRep>(this , p_player->m_infosets .size () + 1 ,
607608 p_player.get (), p_actions);
608609 p_player->m_infosets .push_back (newInfoset);
610+ if (p_generateLabels) {
611+ std::for_each (newInfoset->m_actions .begin (), newInfoset->m_actions .end (),
612+ [act = 1 ](const GameAction &a) mutable { a->SetLabel (std::to_string (act++)); });
613+ }
609614 return AppendMove (p_node, newInfoset);
610615}
611616
@@ -632,7 +637,8 @@ GameInfoset GameTreeRep::AppendMove(GameNode p_node, GameInfoset p_infoset)
632637 return node->m_infoset ->shared_from_this ();
633638}
634639
635- GameInfoset GameTreeRep::InsertMove (GameNode p_node, GamePlayer p_player, int p_actions)
640+ GameInfoset GameTreeRep::InsertMove (GameNode p_node, GamePlayer p_player, int p_actions,
641+ bool p_generateLabels)
636642{
637643 if (p_actions <= 0 ) {
638644 throw UndefinedException ();
@@ -645,6 +651,10 @@ GameInfoset GameTreeRep::InsertMove(GameNode p_node, GamePlayer p_player, int p_
645651 auto newInfoset = std::make_shared<GameInfosetRep>(this , p_player->m_infosets .size () + 1 ,
646652 p_player.get (), p_actions);
647653 p_player->m_infosets .push_back (newInfoset);
654+ if (p_generateLabels) {
655+ std::for_each (newInfoset->m_actions .begin (), newInfoset->m_actions .end (),
656+ [act = 1 ](const GameAction &a) mutable { a->SetLabel (std::to_string (act++)); });
657+ }
648658 return InsertMove (p_node, newInfoset);
649659}
650660
0 commit comments