add all vendors contains in specificator to search
This commit is contained in:
@@ -4,9 +4,7 @@ import ru.trader.analysis.graph.Edge;
|
|||||||
import ru.trader.core.Offer;
|
import ru.trader.core.Offer;
|
||||||
import ru.trader.core.Vendor;
|
import ru.trader.core.Vendor;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Collection;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.function.Consumer;
|
import java.util.function.Consumer;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@@ -89,6 +87,14 @@ public class CrawlerSpecificator {
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Collection<Vendor> getVendors(Collection<Vendor> vendors){
|
||||||
|
Set<Vendor> v = new HashSet<>(containsAny);
|
||||||
|
v.addAll(any);
|
||||||
|
v.addAll(all);
|
||||||
|
v.addAll(vendors);
|
||||||
|
return v;
|
||||||
|
}
|
||||||
|
|
||||||
private RouteSpecification<Vendor> buildOffersSpec(Collection<Vendor> vendors){
|
private RouteSpecification<Vendor> buildOffersSpec(Collection<Vendor> vendors){
|
||||||
RouteSpecification<Vendor> res = null;
|
RouteSpecification<Vendor> res = null;
|
||||||
for (Offer offer : offers) {
|
for (Offer offer : offers) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import ru.trader.analysis.graph.Traversal;
|
|||||||
public interface RouteSpecification<T> {
|
public interface RouteSpecification<T> {
|
||||||
|
|
||||||
public boolean specified(Edge<T> edge, Traversal<T> entry);
|
public boolean specified(Edge<T> edge, Traversal<T> entry);
|
||||||
|
default boolean content(Edge<T> edge, Traversal<T> entry){return specified(edge, entry);}
|
||||||
public default int lastFound(Edge<T> edge, Traversal<T> entry){
|
public default int lastFound(Edge<T> edge, Traversal<T> entry){
|
||||||
return specified(edge, entry) ? 0 : matchCount();
|
return specified(edge, entry) ? 0 : matchCount();
|
||||||
}
|
}
|
||||||
@@ -25,6 +26,11 @@ public interface RouteSpecification<T> {
|
|||||||
return RouteSpecification.this.specified(edge, entry) && other.specified(edge, entry);
|
return RouteSpecification.this.specified(edge, entry) && other.specified(edge, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||||
|
return RouteSpecification.this.content(edge, entry) || other.content(edge, entry);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||||
return RouteSpecification.this.lastFound(edge, entry) + other.lastFound(edge, entry);
|
return RouteSpecification.this.lastFound(edge, entry) + other.lastFound(edge, entry);
|
||||||
@@ -73,6 +79,11 @@ public interface RouteSpecification<T> {
|
|||||||
return RouteSpecification.this.specified(edge, entry) || other.specified(edge, entry);
|
return RouteSpecification.this.specified(edge, entry) || other.specified(edge, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||||
|
return RouteSpecification.this.content(edge, entry) || other.content(edge, entry);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||||
return Math.min(RouteSpecification.this.lastFound(edge, entry), other.lastFound(edge, entry));
|
return Math.min(RouteSpecification.this.lastFound(edge, entry), other.lastFound(edge, entry));
|
||||||
@@ -120,6 +131,12 @@ public interface RouteSpecification<T> {
|
|||||||
return !RouteSpecification.this.specified(edge, entry);
|
return !RouteSpecification.this.specified(edge, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||||
|
return !RouteSpecification.this.content(edge, entry);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||||
return RouteSpecification.this.lastFound(edge, entry);
|
return RouteSpecification.this.lastFound(edge, entry);
|
||||||
|
|||||||
@@ -30,6 +30,12 @@ public class RouteSpecificationByPair<T> implements RouteSpecification<T> {
|
|||||||
return searchPair(edge, entry) == 0;
|
return searchPair(edge, entry) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||||
|
T obj = edge.getTarget().getEntry();
|
||||||
|
return second.equals(obj) || first.contains(obj);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||||
return searchPair(edge, entry);
|
return searchPair(edge, entry);
|
||||||
|
|||||||
@@ -24,6 +24,11 @@ public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
|
|||||||
return all ? containsAll(edge, entry) == 0 : containsAny(edge, entry) == 0;
|
return all ? containsAll(edge, entry) == 0 : containsAny(edge, entry) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean content(Edge<T> edge, Traversal<T> entry) {
|
||||||
|
return targets.contains(edge.getTarget().getEntry());
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
public int lastFound(Edge<T> edge, Traversal<T> entry) {
|
||||||
return all ? containsAll(edge, entry) : containsAny(edge, entry);
|
return all ? containsAll(edge, entry) : containsAny(edge, entry);
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ public class VendorsCrawler extends Crawler<Vendor> {
|
|||||||
protected boolean check(Edge<Vendor> e){
|
protected boolean check(Edge<Vendor> e){
|
||||||
VendorsGraph.VendorsBuildEdge edge = (VendorsGraph.VendorsBuildEdge) e;
|
VendorsGraph.VendorsBuildEdge edge = (VendorsGraph.VendorsBuildEdge) e;
|
||||||
return fuel <= edge.getMaxFuel() && (fuel >= edge.getMinFuel() || edge.getSource().getEntry().canRefill())
|
return fuel <= edge.getMaxFuel() && (fuel >= edge.getMinFuel() || edge.getSource().getEntry().canRefill())
|
||||||
&& (edge.getProfit() > 0 || VendorsCrawler.this.isFound(edge, this));
|
&& (edge.getProfit() > 0 || VendorsCrawler.this.isContent(edge, this));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected VendorsEdge wrap(Edge<Vendor> e) {
|
protected VendorsEdge wrap(Edge<Vendor> e) {
|
||||||
|
|||||||
@@ -61,6 +61,10 @@ public class Crawler<T> {
|
|||||||
return edge.isConnect(this.target);
|
return edge.isConnect(this.target);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected boolean isContent(Edge<T> edge, Traversal<T> head){
|
||||||
|
return specification.content(edge, head);
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean isFound(Edge<T> edge, Traversal<T> head){
|
protected boolean isFound(Edge<T> edge, Traversal<T> head){
|
||||||
return specification.specified(edge, head);
|
return specification.specified(edge, head);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -284,14 +284,16 @@ public class MarketAnalyzer {
|
|||||||
return market.get().collect(Collectors.toList());
|
return market.get().collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Vendor> getVendors(CrawlerSpecificator specificator){
|
private Collection<Vendor> getVendors(CrawlerSpecificator specificator){
|
||||||
List<Vendor> vendors;
|
Collection<Vendor> vendors;
|
||||||
if (specificator.getMinHop() >= profile.getLands()){
|
if (specificator.getMinHop() >= profile.getLands()){
|
||||||
vendors = market.get().map(Place::asTransit).collect(Collectors.toList());
|
vendors = market.get().map(Place::asTransit).collect(Collectors.toList());
|
||||||
market.getVendors().filter(specificator::contains).forEach(vendors::add);
|
market.getVendors().filter(specificator::contains).forEach(vendors::add);
|
||||||
return vendors;
|
} else {
|
||||||
|
vendors = market.getMarkets(true).collect(Collectors.toList());
|
||||||
|
vendors = specificator.getVendors(vendors);
|
||||||
}
|
}
|
||||||
return market.getMarkets(true).collect(Collectors.toList());
|
return vendors;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Vendor> getVendors(Place place){
|
private List<Vendor> getVendors(Place place){
|
||||||
|
|||||||
Reference in New Issue
Block a user