Archived
0

add all vendors contains in specificator to search

This commit is contained in:
Mo
2015-10-22 22:33:07 +03:00
parent 984b19f182
commit a640bfaef9
7 changed files with 48 additions and 8 deletions

View File

@@ -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) {

View File

@@ -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);

View File

@@ -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);

View File

@@ -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);

View File

@@ -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) {

View File

@@ -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);
} }

View File

@@ -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){