diff --git a/core/src/main/java/ru/trader/analysis/Route.java b/core/src/main/java/ru/trader/analysis/Route.java index a52585f..235fcf0 100644 --- a/core/src/main/java/ru/trader/analysis/Route.java +++ b/core/src/main/java/ru/trader/analysis/Route.java @@ -337,7 +337,7 @@ public class Route implements Comparable { public static Route singletone(Vendor root, double balance, long cargo){ RouteEntry entry = new RouteEntry(root, 0,0,0); - if (!(root instanceof TransitVendor)){ + if (!root.isTransit()){ entry.setLand(true); } Route route = new Route(entry); diff --git a/core/src/main/java/ru/trader/analysis/RouteSearcher.java b/core/src/main/java/ru/trader/analysis/RouteSearcher.java index ce18253..9762c27 100644 --- a/core/src/main/java/ru/trader/analysis/RouteSearcher.java +++ b/core/src/main/java/ru/trader/analysis/RouteSearcher.java @@ -189,7 +189,7 @@ public class RouteSearcher { buyer = orders.get(0).getBuyer(); sellerEntry.addAll(orders); } else { - if (!(vendor instanceof TransitVendor)){ + if (!vendor.isTransit()){ entry.setLand(true); } } @@ -203,7 +203,7 @@ public class RouteSearcher { } if (vEdge != null) { RouteEntry entry = new RouteEntry(vEdge.getTarget().getEntry(), 0, 0, 0); - if (!(entry.getVendor() instanceof TransitVendor)) entry.setLand(true); + if (!entry.getVendor().isTransit()) entry.setLand(true); if (prev != null){ prev.setTime(scorer.getTime(entry, prev)); } @@ -230,7 +230,7 @@ public class RouteSearcher { ConnectibleEdge edge = (ConnectibleEdge) edges.get(i); Vendor vendor = i == 0 ? from : edge.getSource().getEntry().asTransit(); RouteEntry entry = new RouteEntry(vendor, edge.getRefill(), edge.getFuelCost(), 0); - if (i == 0) entry.setLand(!(vendor instanceof TransitVendor)); + if (i == 0) entry.setLand(!vendor.isTransit()); if (prev != null){ prev.setTime(scorer.getTime(entry, prev)); prev.setFullTime(prev.getTime()); @@ -239,7 +239,7 @@ public class RouteSearcher { prev = entry; if (i == edges.size()-1){ entry = new RouteEntry(to, 0, 0, 0); - entry.setLand(!(to instanceof TransitVendor)); + entry.setLand(!to.isTransit()); prev.setTime(scorer.getTime(entry, prev)); prev.setFullTime(prev.getTime()); entries.add(entry); diff --git a/core/src/main/java/ru/trader/analysis/VendorsGraph.java b/core/src/main/java/ru/trader/analysis/VendorsGraph.java index 492c482..c34693b 100644 --- a/core/src/main/java/ru/trader/analysis/VendorsGraph.java +++ b/core/src/main/java/ru/trader/analysis/VendorsGraph.java @@ -75,7 +75,7 @@ public class VendorsGraph extends ConnectibleGraph { } private void updateVertexes(){ - vertexes.removeIf(v -> v.getEntry() instanceof TransitVendor); + vertexes.removeIf(v -> v.getEntry().isTransit()); updateLevels(root); } @@ -124,11 +124,11 @@ public class VendorsGraph extends ConnectibleGraph { BuildHelper helper = super.createHelper(buyer); if (helper.isConnected()){ Vendor seller = vertex.getEntry(); - if (buyer instanceof TransitVendor && (deep == 0 || seller.getPlace().equals(buyer.getPlace()))){ + if (buyer.isTransit() && (deep == 0 || seller.getPlace().equals(buyer.getPlace()))){ LOG.trace("Buyer is transit of seller or is end, skipping"); return new BuildHelper<>(buyer, -1); } - if (seller instanceof TransitVendor && seller.getPlace().equals(buyer.getPlace())){ + if (seller.isTransit() && seller.getPlace().equals(buyer.getPlace())){ LOG.trace("Seller is transit of buyer, skipping"); return new BuildHelper<>(buyer, -1); } @@ -147,10 +147,10 @@ public class VendorsGraph extends ConnectibleGraph { @Override protected BuildEdge createEdge(BuildHelper helper, Vertex next) { BuildEdge cEdge = super.createEdge(helper, next); - if (next.getEntry() instanceof TransitVendor){ + if (next.getEntry().isTransit()){ return cEdge; } - if (vertex.getEntry() instanceof TransitVendor){ + if (vertex.getEntry().isTransit()){ addEdgesToHead(cEdge); } return new VendorsBuildEdge(cEdge); @@ -158,7 +158,7 @@ public class VendorsGraph extends ConnectibleGraph { private void addEdgesToHead(BuildEdge lastEdge){ Vertex target = lastEdge.getTarget(); - assert vertex.getEntry() instanceof TransitVendor && !(target.getEntry() instanceof TransitVendor); + assert vertex.getEntry().isTransit() && !target.getEntry().isTransit(); VendorsGraphBuilder h = this; Path path = new Path<>(Collections.singleton(lastEdge)); while (h != null && h.edge != null){ @@ -177,7 +177,7 @@ public class VendorsGraph extends ConnectibleGraph { if (!source.equals(target)){ addEdge(source, target, path); } - if (!(source.getEntry() instanceof TransitVendor)){ + if (!source.getEntry().isTransit()){ break; } h = h.head; @@ -199,7 +199,7 @@ public class VendorsGraph extends ConnectibleGraph { LOG.trace("Check {}", entry); if (limit >= e.getMinFuel() && limit <= e.getMaxFuel()) { LOG.trace("Connect {} to {}", entry, vertex); - if (vertex.getEntry() instanceof TransitVendor && !(entry instanceof TransitVendor)) { + if (vertex.getEntry().isTransit() && !entry.isTransit()) { addCheckedEdgesToHead(e); } } @@ -208,7 +208,7 @@ public class VendorsGraph extends ConnectibleGraph { private void addCheckedEdgesToHead(VendorsBuildEdge lastEdge){ Vertex target = lastEdge.getTarget(); - assert vertex.getEntry() instanceof TransitVendor && !(target.getEntry() instanceof TransitVendor); + assert vertex.getEntry().isTransit() && !target.getEntry().isTransit(); List> paths = lastEdge.paths; int i = 1; Path path = paths != null ? paths.get(0) : new Path<>(Collections.singleton((BuildEdge)lastEdge)); @@ -232,7 +232,7 @@ public class VendorsGraph extends ConnectibleGraph { if (!source.equals(target)){ addEdge(source, target, path); } - if (!(source.getEntry() instanceof TransitVendor)){ + if (!source.getEntry().isTransit()){ break; } h = h.head; @@ -256,7 +256,7 @@ public class VendorsGraph extends ConnectibleGraph { @Override protected void addSubTask(Edge edge, double nextLimit) { Vertex next = edge.getTarget(); - if (next.getLevel() >= deep && next.getEntry() instanceof TransitVendor) { + if (next.getLevel() >= deep && next.getEntry().isTransit()) { if (deep > 0){ VendorsGraphBuilder task = new VendorsGraphBuilder(this, (BuildEdge) edge, set, deep - 1, nextLimit); task.isAdding = true; diff --git a/core/src/main/java/ru/trader/core/Vendor.java b/core/src/main/java/ru/trader/core/Vendor.java index e908df6..feba35c 100644 --- a/core/src/main/java/ru/trader/core/Vendor.java +++ b/core/src/main/java/ru/trader/core/Vendor.java @@ -85,4 +85,8 @@ public interface Vendor extends Connectable { remove(offer); } } + + default boolean isTransit(){ + return this instanceof TransitVendor; + } }