brouter/brouter-mapaccess/src/main/java/btools/mapaccess/TurnRestriction.java
2019-04-17 11:33:07 +02:00

73 lines
1.5 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;
}
}