package com.plectix.simulator.simulationclasses.solution;
import java.util.List;
import com.plectix.simulator.interfaces.ConnectedComponentInterface;
import com.plectix.simulator.simulationclasses.injections.Injection;
import com.plectix.simulator.simulator.KappaSystem;
import com.plectix.simulator.staticanalysis.Agent;
import com.plectix.simulator.util.SpeciesManager;
/*package*/ final class SolutionSecondMode extends AbstractComplexSolution {
private final SuperStorage superStorage;
private final StraightStorage straightStorage;
SolutionSecondMode(KappaSystem system) {
super(system);
superStorage = getSuperStorage();
straightStorage = getStraightStorage();
}
@Override
public final void addInjectionToPool(RuleApplicationPoolInterface pool, Injection injection) {
if (injection.isSuper()) {
straightStorage.addConnectedComponent(superStorage.extractComponent(injection));
}
}
@Override
public final RuleApplicationPoolInterface prepareRuleApplicationPool() {
return new TransparentRuleApplicationPool(this);
}
@Override
public final void flushPoolContent(RuleApplicationPoolInterface pool) {
// empty!
}
@Override
public final void addInitialConnectedComponents(long quantity, List<Agent> agents) {
for (ConnectedComponentInterface component : SpeciesManager.formConnectedComponents(agents)) {
superStorage.addOrEvenIncrement(quantity, component);
}
}
}