improve compute min lands
This commit is contained in:
@@ -3,8 +3,8 @@ package ru.trader.analysis;
|
|||||||
public interface MutableRouteSpecification<T> extends RouteSpecification<T> {
|
public interface MutableRouteSpecification<T> extends RouteSpecification<T> {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public default boolean updateMutated(){return true;}
|
default boolean updateMutated(){return true;}
|
||||||
@Override
|
@Override
|
||||||
public default boolean mutable(){return true;}
|
default boolean mutable(){return true;}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ public class NullRouteSpecification<T> implements RouteSpecification<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int matchCount() {
|
public int maxMatches() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,17 +5,18 @@ import ru.trader.analysis.graph.Traversal;
|
|||||||
|
|
||||||
public interface RouteSpecification<T> {
|
public interface RouteSpecification<T> {
|
||||||
|
|
||||||
public boolean specified(Edge<T> edge, Traversal<T> entry);
|
boolean specified(Edge<T> edge, Traversal<T> entry);
|
||||||
default boolean content(Edge<T> edge, Traversal<T> entry){return specified(edge, entry);}
|
default boolean content(Edge<T> edge, Traversal<T> entry){return specified(edge, entry);}
|
||||||
public default int lastFound(Edge<T> edge, Traversal<T> entry){
|
default int lastFound(Edge<T> edge, Traversal<T> entry){
|
||||||
return specified(edge, entry) ? 0 : matchCount();
|
return specified(edge, entry) ? 0 : minMatches();
|
||||||
}
|
}
|
||||||
public default int matchCount(){return 1;}
|
default int maxMatches(){return 1;}
|
||||||
public default boolean updateMutated(){return false;}
|
default int minMatches(){return maxMatches();}
|
||||||
public default boolean mutable(){return false;}
|
default boolean updateMutated(){return false;}
|
||||||
public default void update(Traversal<T> entry){}
|
default boolean mutable(){return false;}
|
||||||
public default long getStart(){return 0;}
|
default void update(Traversal<T> entry){}
|
||||||
public default long getEnd(){return Long.MAX_VALUE;}
|
default long getStart(){return 0;}
|
||||||
|
default long getEnd(){return Long.MAX_VALUE;}
|
||||||
|
|
||||||
default RouteSpecification<T> and(final RouteSpecification<T> other){
|
default RouteSpecification<T> and(final RouteSpecification<T> other){
|
||||||
if (other instanceof RouteSpecificationAndMixer){
|
if (other instanceof RouteSpecificationAndMixer){
|
||||||
|
|||||||
@@ -53,10 +53,19 @@ public class RouteSpecificationAndMixer<T> implements RouteSpecificationMixer<T>
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int matchCount() {
|
public int maxMatches() {
|
||||||
int res = 0;
|
int res = 0;
|
||||||
for (RouteSpecification<T> specification : specifications) {
|
for (RouteSpecification<T> specification : specifications) {
|
||||||
res += specification.matchCount();
|
res += specification.maxMatches();
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int minMatches() {
|
||||||
|
int res = 0;
|
||||||
|
for (RouteSpecification<T> specification : specifications) {
|
||||||
|
res += specification.minMatches();
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -112,7 +121,7 @@ public class RouteSpecificationAndMixer<T> implements RouteSpecificationMixer<T>
|
|||||||
|
|
||||||
private int getMinHope(Collection<RouteSpecification<T>> specifications){
|
private int getMinHope(Collection<RouteSpecification<T>> specifications){
|
||||||
if (specifications.isEmpty()) return -1;
|
if (specifications.isEmpty()) return -1;
|
||||||
return specifications.stream().mapToInt(RouteSpecification::matchCount).sum();
|
return specifications.stream().mapToInt(RouteSpecification::minMatches).sum();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void collapse(RouteSpecification<T> specification){
|
private void collapse(RouteSpecification<T> specification){
|
||||||
|
|||||||
@@ -3,7 +3,10 @@ package ru.trader.analysis;
|
|||||||
import ru.trader.analysis.graph.Edge;
|
import ru.trader.analysis.graph.Edge;
|
||||||
import ru.trader.analysis.graph.Traversal;
|
import ru.trader.analysis.graph.Traversal;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class RouteSpecificationByPair<T> implements RouteSpecification<T> {
|
public class RouteSpecificationByPair<T> implements RouteSpecification<T> {
|
||||||
private final Collection<T> first;
|
private final Collection<T> first;
|
||||||
@@ -78,7 +81,7 @@ public class RouteSpecificationByPair<T> implements RouteSpecification<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int matchCount() {
|
public int maxMatches() {
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,7 +3,9 @@ package ru.trader.analysis;
|
|||||||
import ru.trader.analysis.graph.Edge;
|
import ru.trader.analysis.graph.Edge;
|
||||||
import ru.trader.analysis.graph.Traversal;
|
import ru.trader.analysis.graph.Traversal;
|
||||||
|
|
||||||
import java.util.*;
|
import java.util.Collection;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.Optional;
|
||||||
|
|
||||||
public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
|
public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
|
||||||
private final Collection<T> targets;
|
private final Collection<T> targets;
|
||||||
@@ -74,13 +76,13 @@ public class RouteSpecificationByTargets<T> implements RouteSpecification<T> {
|
|||||||
if (targets.isEmpty()) return 0;
|
if (targets.isEmpty()) return 0;
|
||||||
if (checkTime()){
|
if (checkTime()){
|
||||||
long time = edge.getTime();
|
long time = edge.getTime();
|
||||||
if (targetOnly && (time < start || time > end)) return matchCount();
|
if (targetOnly && (time < start || time > end)) return maxMatches();
|
||||||
}
|
}
|
||||||
return all ? containsAll(edge, entry) : containsAny(edge, entry);
|
return all ? containsAll(edge, entry) : containsAny(edge, entry);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int matchCount() {
|
public int maxMatches() {
|
||||||
if (targets.isEmpty()) return 0;
|
if (targets.isEmpty()) return 0;
|
||||||
return all ? targets.size() : 1;
|
return all ? targets.size() : 1;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -49,10 +49,20 @@ public class RouteSpecificationOrMixer<T> implements RouteSpecificationMixer<T>,
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int matchCount() {
|
public int maxMatches() {
|
||||||
|
int res = 0;
|
||||||
|
for (RouteSpecification<T> specification : specifications) {
|
||||||
|
res = Math.max(res, specification.maxMatches());
|
||||||
|
}
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int minMatches() {
|
||||||
|
if (specifications.isEmpty()) return 0;
|
||||||
int res = Integer.MAX_VALUE;
|
int res = Integer.MAX_VALUE;
|
||||||
for (RouteSpecification<T> specification : specifications) {
|
for (RouteSpecification<T> specification : specifications) {
|
||||||
res = Math.min(res, specification.matchCount());
|
res = Math.min(res, specification.minMatches());
|
||||||
}
|
}
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
@@ -146,7 +156,7 @@ public class RouteSpecificationOrMixer<T> implements RouteSpecificationMixer<T>,
|
|||||||
int hard2 = getHard(o2);
|
int hard2 = getHard(o2);
|
||||||
int cmp = Integer.compare(hard1, hard2);
|
int cmp = Integer.compare(hard1, hard2);
|
||||||
if (cmp != 0) return cmp;
|
if (cmp != 0) return cmp;
|
||||||
return Integer.compare(o1.matchCount(), o2.matchCount());
|
return Integer.compare(o1.minMatches(), o2.minMatches());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -7,16 +7,19 @@ import java.util.function.Consumer;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
public interface CrawlerSpecification<T> {
|
public interface CrawlerSpecification<T> {
|
||||||
public RouteSpecification<T> routeSpecification();
|
RouteSpecification<T> routeSpecification();
|
||||||
|
|
||||||
public Consumer<List<Edge<T>>> onFoundFunc();
|
Consumer<List<Edge<T>>> onFoundFunc();
|
||||||
|
|
||||||
public Function<Traversal<T>, Object> getGroupGetter(boolean target);
|
Function<Traversal<T>, Object> getGroupGetter(boolean target);
|
||||||
|
|
||||||
public int getGroupCount();
|
int getGroupCount();
|
||||||
|
|
||||||
public default int getMinLands(){
|
default int getMinLands(){
|
||||||
return routeSpecification() != null ? routeSpecification().matchCount() : 1;
|
return routeSpecification() != null ? routeSpecification().minMatches() : 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
default int getMaxLands(){
|
||||||
|
return routeSpecification() != null ? routeSpecification().maxMatches() : 1;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user