brouter/brouter-map-creator/src/main/java/btools/mapcreator/OsmLinkP.java
2022-07-25 06:14:46 +02:00

90 lines
2 KiB
Java

/**
* Container for link between two Osm nodes (pre-pocessor version)
*
* @author ab
*/
package btools.mapcreator;
public class OsmLinkP {
/**
* The description bitmap is mainly the way description
* used to calculate the costfactor
*/
public byte[] descriptionBitmap;
/**
* The target is either the next link or the target node
*/
protected OsmNodeP sourceNode;
protected OsmNodeP targetNode;
protected OsmLinkP previous;
protected OsmLinkP next;
public OsmLinkP(OsmNodeP source, OsmNodeP target) {
sourceNode = source;
targetNode = target;
}
protected OsmLinkP() {
}
public final boolean counterLinkWritten() {
return descriptionBitmap == null;
}
/**
* Set the relevant next-pointer for the given source
*/
public void setNext(OsmLinkP link, OsmNodeP source) {
if (sourceNode == source) {
next = link;
} else if (targetNode == source) {
previous = link;
} else {
throw new IllegalArgumentException("internal error: setNext: unknown source");
}
}
/**
* Get the relevant next-pointer for the given source
*/
public OsmLinkP getNext(OsmNodeP source) {
if (sourceNode == source) {
return next;
} else if (targetNode == source) {
return previous;
} else {
throw new IllegalArgumentException("internal error: gextNext: unknown source");
}
}
/**
* Get the relevant target-node for the given source
*/
public OsmNodeP getTarget(OsmNodeP source) {
if (sourceNode == source) {
return targetNode;
} else if (targetNode == source) {
return sourceNode;
} else {
throw new IllegalArgumentException("internal error: getTarget: unknown source");
}
}
/**
* Check if reverse link for the given source
*/
public boolean isReverse(OsmNodeP source) {
if (sourceNode == source) {
return false;
} else if (targetNode == source) {
return true;
} else {
throw new IllegalArgumentException("internal error: isReverse: unknown source");
}
}
}