@@ -213,32 +213,35 @@ bool GameInfosetRep::Precedes(GameNode p_node) const
213213 return false ;
214214}
215215
216- GameAction GameInfosetRep ::InsertAction (GameAction p_action /* =0 */ )
216+ GameAction GameTreeRep ::InsertAction (GameInfoset p_infoset, GameAction p_action /* =nullptr */ )
217217{
218- if (p_action && p_action->GetInfoset () != this ) {
218+ if (p_action && p_action->GetInfoset () != p_infoset) {
219+ throw MismatchException ();
220+ }
221+ if (p_infoset->m_efg != this ) {
219222 throw MismatchException ();
220223 }
221224
222- m_efg-> IncrementVersion ();
223- int where = m_actions.size () + 1 ;
225+ IncrementVersion ();
226+ int where = p_infoset-> m_actions .size () + 1 ;
224227 if (p_action) {
225- for (where = 1 ; m_actions[where] != p_action; where++)
228+ for (where = 1 ; p_infoset-> m_actions [where] != p_action; where++)
226229 ;
227230 }
228231
229- auto *action = new GameActionRep (where, " " , this );
230- m_actions.insert (std::next (m_actions.cbegin (), where - 1 ), action);
231- if (m_player->IsChance ()) {
232- m_probs.insert (std::next (m_probs.cbegin (), where - 1 ), Number ());
232+ auto *action = new GameActionRep (where, " " , p_infoset );
233+ p_infoset-> m_actions .insert (std::next (p_infoset-> m_actions .cbegin (), where - 1 ), action);
234+ if (p_infoset-> m_player ->IsChance ()) {
235+ p_infoset-> m_probs .insert (std::next (p_infoset-> m_probs .cbegin (), where - 1 ), Number ());
233236 }
234- RenumberActions ();
235- for (const auto &member : m_members) {
237+ p_infoset-> RenumberActions ();
238+ for (const auto &member : p_infoset-> m_members ) {
236239 member->m_children .insert (std::next (member->m_children .cbegin (), where - 1 ),
237- new GameNodeRep (m_efg , member));
240+ new GameNodeRep (this , member));
238241 }
239242
240- dynamic_cast <GameTreeRep *>(m_efg)-> ClearComputedValues ();
241- dynamic_cast <GameTreeRep *>(m_efg)-> Canonicalize ();
243+ ClearComputedValues ();
244+ Canonicalize ();
242245 return action;
243246}
244247
0 commit comments