/** * 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; } }