package edu.kit.pse.ws2013.routekit.routecalculation;
import edu.kit.pse.ws2013.routekit.models.ArcFlags;
import edu.kit.pse.ws2013.routekit.models.ProfileMapCombination;
import edu.kit.pse.ws2013.routekit.util.PointOnEdge;
/**
* Uses Dijkstra’s Algorithm to determine the fastest route between start and
* destination point for the current {@link ProfileMapCombination}. The
* calculation is sped up by usage of Arc-Flags.
*/
public class ArcFlagsDijkstra extends Dijkstra {
ArcFlags flags;
@Override
public Route calculateRoute(PointOnEdge start, PointOnEdge destination,
ProfileMapCombination data) {
flags = data.getArcFlags();
return super.calculateRoute(start, destination, data);
}
@Override
protected boolean allowsTurn(int turn) {
// fetch Arc-Flags
final int arcFlag = flags.getFlag(turn);
int arcBit = (arcFlag >> destinationPartition) & 0x1;
if (destinationCorrespondingPartition != -1) {
arcBit |= (arcFlag >> destinationCorrespondingPartition) & 0x1;
}
// check arc bit
return arcBit != 0;
}
}