package mage.player.ai.ma.optimizers.impl;
import mage.abilities.Ability;
import mage.game.Game;
import mage.player.ai.ma.optimizers.TreeOptimizer;
import java.util.ArrayList;
import java.util.List;
/**
* Base class for tree optimizers.
*
* @author ayratn
*/
public abstract class BaseTreeOptimizer implements TreeOptimizer {
/**
* List of abilities that should be removed because of optimization.
*
*/
protected List<Ability> toRemove;
/**
* Inner method for filtering actions.
* Should be implemented by classes.
*
* @param game
* @param actions
*/
abstract void filter(Game game, List<Ability> actions);
/**
* Template method for optimization.
*
* @param game
* @param actions
*/
@Override
public final void optimize(Game game, List<Ability> actions) {
filter(game, actions);
if (toRemove != null) {
for (Ability r : toRemove) {
actions.remove(r);
}
}
}
/**
* Mark an ability to be removed
* Not thread-safe for performance reasons.
*
* @param ability
*/
protected void removeAbility(Ability ability) {
if (toRemove == null) {
toRemove = new ArrayList<>();
}
toRemove.add(ability);
}
}