Integrate access information in RoadInformation.
This commit is contained in:
@@ -28,9 +28,36 @@ public class RoadInformation {
|
||||
COASTLINE
|
||||
}
|
||||
|
||||
/**
|
||||
* Access mode.
|
||||
*/
|
||||
public enum AccessMode {
|
||||
FOOT, BICYCLE, SMALL_MOTORCYCLE, MOTORCYCLE, MOTORCAR, BUS
|
||||
}
|
||||
|
||||
// Some masks...
|
||||
@SuppressWarnings("unused")
|
||||
private static final int MASK_UNKNOWN = 0x01;
|
||||
private static final int MASK_PRIVATE = 0x02;
|
||||
@SuppressWarnings("unused")
|
||||
private static final int MASK_AGRICULTURAL = 0x04;
|
||||
@SuppressWarnings("unused")
|
||||
private static final int MASK_SERVICE = 0x08;
|
||||
private static final int MASK_PUBLIC_TRANSPORT = 0x10;
|
||||
|
||||
private static final int MASK_FOOT = 0x01 << 8;
|
||||
private static final int MASK_BICYCLE = 0x02 << 8;
|
||||
private static final int MASK_MOTORCYCLE = 0x0C << 8;
|
||||
private static final int MASK_SMALL_MOTORCYCLE = 0x08 << 8;
|
||||
private static final int MASK_MOTORCAR = 0x10 << 8;
|
||||
private static final int MASK_BUS = 0x20 << 8;
|
||||
|
||||
// Type of the road (see above).
|
||||
private final RoadType type;
|
||||
|
||||
// Access information
|
||||
private final int access;
|
||||
|
||||
// One way road?
|
||||
private final boolean oneway;
|
||||
|
||||
@@ -40,13 +67,64 @@ public class RoadInformation {
|
||||
// Name of the road.
|
||||
private final String name;
|
||||
|
||||
public RoadInformation(RoadType roadType, boolean isOneWay, int maxSpeed, String name) {
|
||||
public RoadInformation(RoadType roadType, int access, boolean isOneWay, int maxSpeed,
|
||||
String name) {
|
||||
this.type = roadType;
|
||||
this.access = access;
|
||||
this.oneway = isOneWay;
|
||||
this.maxSpeed = maxSpeed;
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
// Access information
|
||||
|
||||
/**
|
||||
* @return true if this is a private road.
|
||||
*/
|
||||
public boolean isPrivate() {
|
||||
return (this.access & MASK_PRIVATE) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return true if this road is reserved for public transport.
|
||||
*/
|
||||
public boolean isPublicTransport() {
|
||||
return (this.access & MASK_PUBLIC_TRANSPORT) != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param mode
|
||||
*
|
||||
* @return true if this road is allowed for the specified mode.
|
||||
*/
|
||||
public boolean isAllowedFor(AccessMode mode) {
|
||||
if ((this.access & MASK_UNKNOWN) != 0) {
|
||||
return true;
|
||||
}
|
||||
int maskedAccess = 0;
|
||||
switch (mode) {
|
||||
case FOOT:
|
||||
maskedAccess = access & MASK_FOOT;
|
||||
break;
|
||||
case BICYCLE:
|
||||
maskedAccess = access & MASK_BICYCLE;
|
||||
break;
|
||||
case SMALL_MOTORCYCLE:
|
||||
maskedAccess = access & MASK_SMALL_MOTORCYCLE;
|
||||
break;
|
||||
case MOTORCYCLE:
|
||||
maskedAccess = access & MASK_MOTORCYCLE;
|
||||
break;
|
||||
case MOTORCAR:
|
||||
maskedAccess = access & MASK_MOTORCAR;
|
||||
break;
|
||||
case BUS:
|
||||
maskedAccess = access & MASK_BUS;
|
||||
break;
|
||||
}
|
||||
return maskedAccess != 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return Type of the road.
|
||||
*/
|
||||
@@ -77,7 +155,6 @@ public class RoadInformation {
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see java.lang.Object#toString()
|
||||
*/
|
||||
@Override
|
||||
@@ -89,7 +166,8 @@ public class RoadInformation {
|
||||
if (getType() == RoadType.MOTORWAY) {
|
||||
typeAsString = "highway";
|
||||
}
|
||||
return typeAsString + " : " + getName() + " " + (isOneWay() ? " (oneway) " : "") + maxSpeed + " km/h (max.)";
|
||||
return typeAsString + " : " + getName() + " " + (isOneWay() ? " (oneway) " : "") + maxSpeed
|
||||
+ " km/h (max.)";
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user