60 lines
1.4 KiB
Java
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;
|
|
}
|
|
|
|
}
|