package org.opentripplanner.traffic;
import io.opentraffic.engine.data.pbf.ExchangeFormat;
import org.opentripplanner.routing.edgetype.StreetEdge;
import java.io.Serializable;
/**
* Represents a segment of an OSM way.
*/
public class Segment implements Serializable {
/**
* ID of the way to which this is attached
*/
public final long wayId;
/**
* ID of the starting OSM node.
*/
public final long startNodeId;
/**
* ID of the ending OSM node.
*/
public final long endNodeId;
public Segment (ExchangeFormat.SegmentDefinition segmentDefinition) {
this.wayId = segmentDefinition.getWayId();
this.startNodeId = segmentDefinition.getStartNodeId();
this.endNodeId = segmentDefinition.getEndNodeId();
}
public Segment(StreetEdge edge) {
this.wayId = edge.wayId;
this.endNodeId = edge.getEndOsmNodeId();
this.startNodeId = edge.getStartOsmNodeId();
}
public Segment (long wayId, long startNodeId, long endNodeId) {
this.wayId = wayId;
this.startNodeId = startNodeId;
this.endNodeId = endNodeId;
}
// this is used as a hashmap key so needs to have semantic equality and hash
@Override public boolean equals(Object o) {
if (this == o)
return true;
if (o == null || getClass() != o.getClass())
return false;
Segment segment = (Segment) o;
if (endNodeId != segment.endNodeId)
return false;
if (startNodeId != segment.startNodeId)
return false;
if (wayId != segment.wayId)
return false;
return true;
}
@Override public int hashCode() {
int result = (int) (wayId ^ (wayId >>> 32));
result = 31 * result + (int) (startNodeId ^ (startNodeId >>> 32));
result = 31 * result + (int) (endNodeId ^ (endNodeId >>> 32));
return result;
}
}