Archived
0

fix search route if not target

This commit is contained in:
iMoHax
2015-07-21 16:00:33 +03:00
parent 64b82dd76f
commit 7f0b90e19e
2 changed files with 11 additions and 4 deletions

View File

@@ -58,7 +58,6 @@ public class RouteSearcher {
int count = (int) Math.ceil(scorer.getProfile().getRoutesCount() / fVendors.size()); int count = (int) Math.ceil(scorer.getProfile().getRoutesCount() / fVendors.size());
RouteSpecification<Vendor> specification = RouteSpecificationByTargets.any(toVendors); RouteSpecification<Vendor> specification = RouteSpecificationByTargets.any(toVendors);
for (Vendor fromVendor : fVendors) { for (Vendor fromVendor : fVendors) {
count = count / toVendors.size();
Collection<Route> routes = search(fromVendor, fromVendor, vendors, count, specification); Collection<Route> routes = search(fromVendor, fromVendor, vendors, count, specification);
res.addAll(routes); res.addAll(routes);
} }

View File

@@ -10,9 +10,11 @@ import java.util.Iterator;
public class RouteSpecificationByTargets<T> implements RouteSpecification<T> { public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
protected final Collection<T> targets; protected final Collection<T> targets;
protected final boolean all; protected final boolean all;
protected final boolean targetOnly;
private RouteSpecificationByTargets(Collection<T> targets, boolean all) { private RouteSpecificationByTargets(Collection<T> targets, boolean all, boolean targetOnly) {
this.all = all; this.all = all;
this.targetOnly = targetOnly;
this.targets = new ArrayList<>(targets); this.targets = new ArrayList<>(targets);
} }
@@ -32,6 +34,9 @@ public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
private boolean containsAny(Edge<T> edge, Traversal<T> entry) { private boolean containsAny(Edge<T> edge, Traversal<T> entry) {
T obj = edge.getTarget().getEntry(); T obj = edge.getTarget().getEntry();
if (targets.contains(obj)) return true; if (targets.contains(obj)) return true;
if (targetOnly){
return false;
}
Iterator<Edge<T>> iterator = entry.routeIterator(); Iterator<Edge<T>> iterator = entry.routeIterator();
while (iterator.hasNext()){ while (iterator.hasNext()){
if (targets.contains(iterator.next().getTarget().getEntry())){ if (targets.contains(iterator.next().getTarget().getEntry())){
@@ -42,11 +47,14 @@ public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
} }
public static <T> RouteSpecificationByTargets<T> all(Collection<T> targets){ public static <T> RouteSpecificationByTargets<T> all(Collection<T> targets){
return new RouteSpecificationByTargets<>(targets, true); return new RouteSpecificationByTargets<>(targets, true, false);
} }
public static <T> RouteSpecificationByTargets<T> any(Collection<T> targets){ public static <T> RouteSpecificationByTargets<T> any(Collection<T> targets){
return new RouteSpecificationByTargets<>(targets, false); return new RouteSpecificationByTargets<>(targets, false, true);
} }
public static <T> RouteSpecificationByTargets<T> containAny(Collection<T> targets){
return new RouteSpecificationByTargets<>(targets, false, false);
}
} }