brouter/brouter-mapaccess/src/main/java/btools/mapaccess/TurnRestriction.java
2022-07-25 06:14:46 +02:00

60 lines
1.4 KiB
Java

/**
* Container for a turn restriction
*
* @author ab
*/
package btools.mapaccess;
public final class TurnRestriction {
public boolean isPositive;
public short exceptions;
public int fromLon;
public int fromLat;
public int toLon;
public int toLat;
public TurnRestriction next;
public boolean exceptBikes() {
return (exceptions & 1) != 0;
}
public boolean exceptMotorcars() {
return (exceptions & 2) != 0;
}
public static boolean isTurnForbidden(TurnRestriction first, int fromLon, int fromLat, int toLon, int toLat, boolean bikeMode, boolean carMode) {
boolean hasAnyPositive = false;
boolean hasPositive = false;
boolean hasNegative = false;
TurnRestriction tr = first;
while (tr != null) {
if ((tr.exceptBikes() && bikeMode) || (tr.exceptMotorcars() && carMode)) {
tr = tr.next;
continue;
}
if (tr.fromLon == fromLon && tr.fromLat == fromLat) {
if (tr.isPositive) {
hasAnyPositive = true;
}
if (tr.toLon == toLon && tr.toLat == toLat) {
if (tr.isPositive) {
hasPositive = true;
} else {
hasNegative = true;
}
}
}
tr = tr.next;
}
return !hasPositive && (hasAnyPositive || hasNegative);
}
@Override
public String toString() {
return "pos=" + isPositive + " fromLon=" + fromLon + " fromLat=" + fromLat + " toLon=" + toLon + " toLat=" + toLat;
}
}