Archived
0

add limit to graph builder

This commit is contained in:
Mo
2016-11-20 19:02:43 +03:00
parent c5d1eda9a7
commit 2cdb1e333d

View File

@@ -8,7 +8,6 @@ import ru.trader.analysis.graph.Path;
import ru.trader.analysis.graph.Vertex;
import ru.trader.core.Order;
import ru.trader.core.Profile;
import ru.trader.core.TransitVendor;
import ru.trader.core.Vendor;
import java.util.*;
@@ -20,6 +19,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
private final Scorer scorer;
private final List<VendorsGraphBuilder> deferredTasks = new ArrayList<>();
private final static int MAX_DEFERRED_TASKS = 5000;
public VendorsGraph(Scorer scorer, AnalysisCallBack callback) {
super(scorer.getProfile(), callback);
@@ -65,6 +65,12 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
}
}
protected boolean canHoldTask(){
synchronized (deferredTasks){
return deferredTasks.size() < MAX_DEFERRED_TASKS;
}
}
private void runDeferredTasks(){
deferredTasks.sort((b1,b2) -> Integer.compare(b2.getDeep(), b1.getDeep()));
for (VendorsGraphBuilder task : deferredTasks) {
@@ -257,7 +263,7 @@ public class VendorsGraph extends ConnectibleGraph<Vendor> {
protected void addSubTask(Edge<Vendor> edge, double nextLimit) {
Vertex<Vendor> next = edge.getTarget();
if (next.getLevel() >= deep && next.getEntry().isTransit()) {
if (deep > 0){
if (deep > 0 && canHoldTask()){
VendorsGraphBuilder task = new VendorsGraphBuilder(this, (BuildEdge) edge, set, deep - 1, nextLimit);
task.isAdding = true;
holdTask(task);