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