diff --git a/core/src/main/java/ru/trader/analysis/graph/AbstractGraph.java b/core/src/main/java/ru/trader/analysis/graph/AbstractGraph.java index 91ca936..4fa51af 100644 --- a/core/src/main/java/ru/trader/analysis/graph/AbstractGraph.java +++ b/core/src/main/java/ru/trader/analysis/graph/AbstractGraph.java @@ -34,21 +34,13 @@ public abstract class AbstractGraph implements Graph { public void build(T start, Collection set, int maxDeep, double limit) { callback.startBuild(start); - root = getInstance(start, maxDeep); + minJumps = 1; + root = getInstance(start, maxDeep, maxDeep); POOL.invoke(createGraphBuilder(root, set, maxDeep - 1, limit)); - if (set.size() > vertexes.size()){ - minJumps = maxDeep; - } else { - minJumps = 1; - for (Vertex vertex : vertexes) { - int jumps = maxDeep - vertex.getLevel(); - if (jumps > minJumps) minJumps = jumps; - } - } callback.endBuild(); } - private Vertex getInstance(T entry, int deep){ + private Vertex getInstance(T entry, int level, int deep){ Vertex vertex = getVertex(entry).orElse(null); if (vertex == null) { synchronized (vertexes){ @@ -56,8 +48,11 @@ public abstract class AbstractGraph implements Graph { if (vertex == null){ LOG.trace("Is new vertex"); vertex = new Vertex<>(entry, vertexes.size()); - vertex.setLevel(deep); + vertex.setLevel(level); vertexes.add(vertex); + int jumps = root != null ? root.getLevel() - deep : 0; + if (jumps > minJumps) + minJumps = jumps; } } } @@ -125,7 +120,7 @@ public abstract class AbstractGraph implements Graph { double nextLimit = onConnect(entry); if (nextLimit >= 0) { LOG.trace("Connect {} to {}", vertex, entry); - Vertex next = getInstance(entry, 0); + Vertex next = getInstance(entry, 0, deep); vertex.connect(createEdge(next)); // If level > deep when vertex already added on upper deep if (next.getLevel() < deep) {