Map<Index, IndexData> indexMap = new HashMap<Index, IndexData>();
Visualizers.submitToList(visualizers, new Integrand(evaluator));
Visualizers.submitToList(visualizers, new StartIntegration());
Index zeroIndex = new FastIndex();
if (! condition.stop(result)) {
IndexData indexData = evaluateIndex(zeroIndex, evaluator, result, visualizers);
indexMap.put(zeroIndex, indexData);
indexData.priority = 0.0;
queue.add(indexData);
}
while (! condition.stop(result)) {
if(queue.isEmpty()) {
throw new IntegrationFailedException("Index queue is empty");
}
IndexData indexData = queue.poll();
Index index = indexData.index;
indexData.completed = true;
Visualizers.submitToList(visualizers, new IndexStatus(index, "expanded"));
boolean couldExpandFully = true;
for (int i = 0; i < dimension; i++) {
Index succIndex = index.add(i, 1);
if (isValid(indexMap, succIndex)) {
if (evaluator.canEvaluate(succIndex)) {
IndexData succData = evaluateIndex(succIndex, evaluator, result, visualizers);
indexMap.put(succIndex, succData);
queue.add(succData);