@@ -41,7 +41,7 @@ namespace Gambit {
4141
4242GameOutcomeRep::GameOutcomeRep (GameRep *p_game, int p_number) : m_game(p_game), m_number(p_number)
4343{
44- for (const auto &player : p_game-> GetPlayers () ) {
44+ for (const auto &player : m_game-> m_players ) {
4545 m_payoffs[player] = Number ();
4646 }
4747}
@@ -68,20 +68,11 @@ GamePlayerRep::~GamePlayerRep()
6868 }
6969}
7070
71- Array<GameStrategy> GamePlayerRep::GetStrategies () const
72- {
73- m_game->BuildComputedValues ();
74- Array<GameStrategy> ret (m_strategies.size ());
75- std::transform (m_strategies.cbegin (), m_strategies.cend (), ret.begin (),
76- [](const GameStrategyRep *s) -> GameStrategy { return s; });
77- return ret;
78- }
79-
8071void GamePlayerRep::MakeStrategy ()
8172{
82- Array<int > c (NumInfosets ());
73+ Array<int > c (m_infosets. size ());
8374
84- for (size_t i = 1 ; i <= NumInfosets (); i++) {
75+ for (size_t i = 1 ; i <= m_infosets. size (); i++) {
8576 if (m_infosets[i - 1 ]->flag == 1 ) {
8677 c[i] = m_infosets[i - 1 ]->whichbranch ;
8778 }
@@ -118,13 +109,13 @@ void GamePlayerRep::MakeReducedStrats(GameNodeRep *n, GameNodeRep *nn)
118109 n->ptr = nullptr ;
119110 }
120111
121- if (n->NumChildren () > 0 ) {
112+ if (! n->IsTerminal () ) {
122113 if (n->m_infoset ->m_player == this ) {
123114 if (n->m_infoset ->flag == 0 ) {
124115 // we haven't visited this infoset before
125116 n->m_infoset ->flag = 1 ;
126- for (size_t i = 1 ; i <= n->NumChildren (); i++) {
127- GameNodeRep *m = n->m_children [i];
117+ for (size_t i = 1 ; i <= n->m_children . size (); i++) {
118+ GameNodeRep *m = n->m_children [i - 1 ];
128119 n->whichbranch = m;
129120 n->m_infoset ->whichbranch = i;
130121 MakeReducedStrats (m, nn);
@@ -133,19 +124,19 @@ void GamePlayerRep::MakeReducedStrats(GameNodeRep *n, GameNodeRep *nn)
133124 }
134125 else {
135126 // we have visited this infoset, take same action
136- MakeReducedStrats (n->m_children [n->m_infoset ->whichbranch ], nn);
127+ MakeReducedStrats (n->m_children [n->m_infoset ->whichbranch - 1 ], nn);
137128 }
138129 }
139130 else {
140131 n->ptr = nullptr ;
141132 if (nn != nullptr ) {
142133 n->ptr = nn->m_parent ;
143134 }
144- n->whichbranch = n->m_children [ 1 ] ;
135+ n->whichbranch = n->m_children . front () ;
145136 if (n->m_infoset ) {
146137 n->m_infoset ->whichbranch = 0 ;
147138 }
148- MakeReducedStrats (n->m_children [ 1 ] , n->m_children [ 1 ] );
139+ MakeReducedStrats (n->m_children . front () , n->m_children . front () );
149140 }
150141 }
151142 else if (nn) {
@@ -175,50 +166,27 @@ void GamePlayerRep::MakeReducedStrats(GameNodeRep *n, GameNodeRep *nn)
175166 }
176167}
177168
178- GameInfoset GamePlayerRep::GetInfoset (int p_index) const { return m_infosets[p_index - 1 ]; }
179-
180- Array<GameInfoset> GamePlayerRep::GetInfosets () const
181- {
182- Array<GameInfoset> ret (m_infosets.size ());
183- std::transform (m_infosets.cbegin (), m_infosets.cend (), ret.begin (),
184- [](const GameInfosetRep *s) -> GameInfoset { return s; });
185- return ret;
186- }
187-
188169size_t GamePlayerRep::NumSequences () const
189170{
190171 if (!m_game->IsTree ()) {
191172 throw UndefinedException ();
192173 }
193- return std::accumulate (
194- m_infosets.cbegin (), m_infosets.cend (), 1 ,
195- [](int ct, const GameInfosetRep *s) -> int { return ct + s->m_actions .size (); });
174+ return std::transform_reduce (m_infosets.cbegin (), m_infosets.cend (), 1 , std::plus<>(),
175+ [](const GameInfosetRep *s) { return s->m_actions .size (); });
196176}
197177
198178// ========================================================================
199179// class GameRep
200180// ========================================================================
201181
202- Array<GamePlayer> GameRep::GetPlayers () const
182+ GameRep::~GameRep ()
203183{
204- Array<GamePlayer> ret (NumPlayers ());
205- for (size_t pl = 1 ; pl <= NumPlayers (); pl++) {
206- ret[pl] = GetPlayer (pl);
184+ for (auto player : m_players) {
185+ player->Invalidate ();
207186 }
208- return ret;
209- }
210-
211- Array<GameStrategy> GameRep::GetStrategies () const
212- {
213- Array<GameStrategy> ret (MixedProfileLength ());
214- auto output = ret.begin ();
215- for (auto player : GetPlayers ()) {
216- for (auto strategy : player->GetStrategies ()) {
217- *output = strategy;
218- ++output;
219- }
187+ for (auto outcome : m_outcomes) {
188+ outcome->Invalidate ();
220189 }
221- return ret;
222190}
223191
224192// ------------------------------------------------------------------------
0 commit comments