| 239 | } |
| 240 | |
| 241 | TacticResult exec(const Goal &goal0) const override { |
| 242 | Goal goal(goal0); |
| 243 | TacticResult r; |
| 244 | string last_result; |
| 245 | |
| 246 | for (auto &t : tactics) { |
| 247 | r = t->exec(goal); |
| 248 | auto newgoal = r.toGoal(); |
| 249 | |
| 250 | auto new_r = newgoal.toString(); |
| 251 | if (new_r != last_result) { |
| 252 | dbg() << new_r << '\n'; |
| 253 | last_result = new_r; |
| 254 | } else { |
| 255 | dbg() << "(no change)\n"; |
| 256 | } |
| 257 | goal = std::move(newgoal); |
| 258 | if (goal.isDecided()) |
| 259 | break; |
| 260 | } |
| 261 | return r; |
| 262 | } |
| 263 | }; |
| 264 | |
| 265 |